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

StackOverflow https://stackoverflow.com/questions/177956

Вопрос

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

  • Любое ненулевое значение равно ВЕРНО в результатах
  • Любое нулевое значение равно ЛОЖЬ в результатах
Это было полезно?

Решение

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

Тем не менее, вы можете использовать CASE, КОГДА для получения значения вы можете использовать в сравнении:

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

Другие советы

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

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, ЗАТЕМ 0

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

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

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

select dbo.isNotNull(myIntColumn) from myTable

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

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

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

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

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

Вы также можете написать это, используя синтаксис CASE, но в Oracle приведенное выше является идиоматическим.ДЕКОДИРОВАНИЕ немного похоже на переключатель / корпус;если col равно НУЛЮ, то возвращается 0, в противном случае 1.

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

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) ВОЗВРАТ ifNotNull если в value не является нулевым, и ifNull в противном случае.

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

Итак:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top