В большинстве (если не во всех) оболочках Unis все переменные хранят строки. Концепция преобразования в целое число не существует.
Но некоторые операции могут принимать строки в качестве входных данных, внутренне преобразовывать их в целые числа, выполнять операцию и возвращать результат в виде строки.
В bash то, что вы намерены делать, может быть записано как:
if [ $(($num + 8)) -lt 100 ]
then
num=$((num+8))
fi
where c1 is null and c2 is null ... and c60 is null
ярлык с использованием конкатенации строк
(синтаксис Oracle):
where c1||c2||c3 ... c59||c60 is null
возможно с COALESCE
SELECT * FROM table WHERE coalesce(col1, col2, col3, ..., colN) IS NULL
First of all, if you have a table that has so many nulls and you use SQL Server 2008 - you might want to define the table using sparse columns (http://msdn.microsoft.com/en-us/library/cc280604.aspx).
Secondly I am not sure if coalesce solves the question asks - it seems like Ammu might actually want to find the list of columns that are null for all rows, but I might have misunderstood. Nevertheless - it is an interesting question, so I wrote a procedure to list null columns for any given table:
IF (OBJECT_ID(N'PrintNullColumns') IS NOT NULL) DROP PROC dbo.PrintNullColumns; go CREATE PROC dbo.PrintNullColumns(@tablename sysname) AS BEGIN SET NOCOUNT ON; DECLARE @query nvarchar(max); DECLARE @column sysname; DECLARE columns_cursor CURSOR FOR SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE t.name = @tablename AND c.is_nullable = 1; OPEN columns_cursor; FETCH NEXT FROM columns_cursor INTO @column; WHILE (@@FETCH_STATUS = 0) BEGIN SET @query = N' DECLARE @c int SELECT @c = COUNT(*) FROM ' + @tablename + ' WHERE ' + @column + N' IS NOT NULL IF (@c = 0) PRINT (''' + @column + N''');' EXEC (@query); FETCH NEXT FROM columns_cursor INTO @column; END CLOSE columns_cursor; DEALLOCATE columns_cursor; SET NOCOUNT OFF; RETURN; END; go
Вы пытаетесь выяснить, является ли определенный набор из 60 столбцов нулевым, или вы просто хотите выяснить, являются ли какие-либо 60 из 100 столбцов нулевыми (необязательно одинаковыми 60? для каждой строки?)
Если это последняя, то одним из способов сделать это в Oracle можно было бы использовать функцию nvl2, например, так:
select ... where (nvl2(col1,0,1)+nvl2(col2,0,1)+...+nvl2(col100,0,1) > 59)
Быстрый тест этой идеи:
select 'dummy' from dual where nvl2('somevalue',0,1) + nvl2(null,0,1) > 1
Возвращает 0 строк, в то время как:
select 'dummy' from dual where nvl2(null,0,1) + nvl2(null,0,1) > 1
Возвращает 1 строку, как и ожидалось, поскольку более одного из столбцов являются нулевыми.
Было бы полезно узнать, какой БД вы используете и, возможно, какой язык или структуру БД, если используете один.
Это должно работать, хотя в любой базе данных.
Что-то вроде этого, вероятно, будет хорошей хранимой процедурой, так как для него нет входных параметров.
select count(*) from table where col1 is null or col2 is null ...