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

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

  • Любое ненулевое значение равно ИСТИНА в результатах
  • Любое значение NULL равно FALSE в результатах

Ответы [ 9 ]

48 голосов
/ 07 октября 2008

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

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

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
17 голосов
/ 07 октября 2008

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

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

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

4 голосов
/ 07 октября 2008
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

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

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

3 голосов
/ 07 октября 2008

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

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

2 голосов
/ 07 октября 2008

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

1 голос
/ 02 ноября 2008

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

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

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

1 голос
/ 07 октября 2008
isnull(column - column + 1, 0) != 0
0 голосов
/ 11 апреля 2016

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

Итак:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
0 голосов
/ 20 мая 2015

Самый короткий из известных мне Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...