SQL-запрос, чтобы проверить, является ли 40 столбцов в таблице пустым

В большинстве (если не во всех) оболочках Unis все переменные хранят строки. Концепция преобразования в целое число не существует.

Но некоторые операции могут принимать строки в качестве входных данных, внутренне преобразовывать их в целые числа, выполнять операцию и возвращать результат в виде строки.

В bash то, что вы намерены делать, может быть записано как:

if [ $(($num + 8)) -lt 100 ]
then
  num=$((num+8))
fi
8
задан Jhonny D. Cano -Leftware- 23 April 2009 в 04:40
поделиться

5 ответов

where c1 is null and c2 is null ... and c60 is null

ярлык с использованием конкатенации строк (синтаксис Oracle):

where c1||c2||c3 ... c59||c60 is null
8
ответ дан 5 December 2019 в 05:13
поделиться

возможно с COALESCE

SELECT * FROM table WHERE coalesce(col1, col2, col3, ..., colN) IS NULL
23
ответ дан 5 December 2019 в 05:13
поделиться

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
1
ответ дан 5 December 2019 в 05:13
поделиться

Вы пытаетесь выяснить, является ли определенный набор из 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 строку, как и ожидалось, поскольку более одного из столбцов являются нулевыми.

1
ответ дан 5 December 2019 в 05:13
поделиться

Было бы полезно узнать, какой БД вы используете и, возможно, какой язык или структуру БД, если используете один.

Это должно работать, хотя в любой базе данных.

Что-то вроде этого, вероятно, будет хорошей хранимой процедурой, так как для него нет входных параметров.

select count(*) from table where col1 is null or col2 is null ...
0
ответ дан 5 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: