Каков наилучший способ преобразования значения int или null в значение boolean в SQL-запросе, например:
- Любое ненулевое значение TRUE в результатах
- Любое нулевое значение FALSE в результатах
Каков наилучший способ преобразования значения int или null в значение boolean в SQL-запросе, например:
Насколько я знаю (исправьте меня, если я ошибаюсь), в SQL нет понятия буквальных логических значений. Вы можете иметь выражения, оценивающие логические значения, но вы не можете их выводить.
Это означает, что вы можете использовать CASE WHEN для получения значения, которое вы можете использовать в сравнении:
SELECT
CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput
FROM
table
Не нужно использовать регистр... когда:
select (column_name is not null) as result from table_name;
Возвращает 1 для всех полей, а не NULL и 0 для всех полей NULL, которые находятся как можно ближе к логическим значениям в SQL.
SELECT
CASE
WHEN thevalue IS NULL THEN 0
ELSE 1
END AS newVal
FROM .... (rest of select)
Я думаю, что это что-то вроде этого
Собственно, ISNULL, возможно, должно быть КОГДА значение имеет значение NULL THEN 0
Предполагая, что вы хотите, чтобы значение 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 более универсален, хотя он будет работать с любым типом данных
Возможно, вы захотите сделать Convert (BIT, Value) вашего результата. Потому что что-то SQL вернет ошибку, что значение не является логическим.
isnull(column - column + 1, 0) != 0
В Oracle, если вы используете 0 для false и 1 для true: -
SELECT DECODE( col, NULL, 0, 1) FROM ...
Вы также можете записать это с помощью синтаксиса CASE, но вышеописанное является идиоматическим в Oracle. DECODE немного напоминает коммутатор/корпус; если col равно NULL, возвращается 0, иначе 1.
Самый короткий, который я знаю для Oracle:
SELECT NVL2(nullableColumn, 1, 0) FROM someTable
NVL2(value, ifNotNull, ifNull)
возвращает ifNotNull
, если value
не является нулевым, а ifNull
в противном случае.
Обычно, когда используется 1, это означает, что это правда, а в другом случае.
Итак:
SELECT IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table