it-roy-ru.com

Каков наилучший способ преобразовать int или null в логическое значение в запросе SQL?

Каков наилучший способ преобразовать значение типа int или null в логическое значение в запросе SQL, например:

  • Любое ненулевое значениеTRUEв результатах
  • Любое значение NULL равноFALSEв результатах
31
Thomas Bratt

Насколько мне известно (поправьте меня, если я ошибаюсь), в SQL нет понятия буквенных логических значений. Вы можете иметь выражения с булевыми значениями, но не можете их выводить.

При этом вы можете использовать CASE WHEN для получения значения, которое вы можете использовать в сравнении:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
47
Tomalak

Нет необходимости использовать случай ... когда:

select (column_name is not null) as result from table_name;

Возвращает 1 для всех полей, отличных от NULL, и 0 для всех полей, которые имеют значение NULL, что максимально близко к логическим значениям в SQL. 

16
cvk
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

Я думаю, что-то вроде этого

На самом деле, ISNULL, возможно, должно быть, когда значение IS равно NULL THEN 0

4
mattlant

Предполагая, что вы хотите получить значение 0,1 в качестве возврата, и что мы говорим о целом числе, я бы использовал логику, указанную в Torbjörn , и поместил бы ее в функцию

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@[email protected]+1,0)
end

так что вы можете использовать его в любое время, просто позвонив 

select dbo.isNotNull(myIntColumn) from myTable

Ответ, предоставленный Tomalak , более универсален, поскольку он будет работать с любым типом данных.

3
kristof

Вы можете захотеть конвертировать (BIT, Value) вашего результата. Потому что что-то SQL вернет ошибку, что значение не является логическим.

2
Patrick Parent
isnull(column - column + 1, 0) != 0
1
Torbjörn Gyllebring

В Oracle предполагается, что вы используете 0 для false и 1 для true: -

SELECT DECODE( col, NULL, 0, 1) FROM ...

Вы также можете написать это, используя синтаксис CASE, но вышеприведенное является идиоматическим в Oracle. DECODE немного похож на переключатель/кейс; если col равен NULL, то возвращается 0, иначе 1.

1
WW.

Обычно, когда используется 1, это означает, что истина, а в другом случае. 

Так:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
0
David Castro

Самый короткий, который я знаю для Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) возвращает ifNotNull, если value не является нулевым, и ifNull в противном случае.

0
PL_kolek