Подтвердить что ты не робот

Каков наилучший способ преобразования значения int или null в значение boolean в SQL-запросе?

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

  • Любое ненулевое значение TRUE в результатах
  • Любое нулевое значение FALSE в результатах
4b9b3361

Ответ 1

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

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

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

Ответ 2

Не нужно использовать регистр... когда:

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

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

Ответ 3

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

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

Собственно, ISNULL, возможно, должно быть КОГДА значение имеет значение NULL THEN 0

Ответ 4

Предполагая, что вы хотите, чтобы значение 0,1 возвращалось, и что мы говорим о integer, я бы использовал логику, указанную 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 более универсален, хотя он будет работать с любым типом данных

Ответ 5

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

Ответ 6

isnull(column - column + 1, 0) != 0

Ответ 7

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

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

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

Ответ 8

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

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

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

Ответ 9

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

Итак:

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