IS NULL не работает
У меня есть таблица, подобная приведенной выше, с двумя левыми столбцами (они оба целочисленные), и я добавил в эту таблицу еще два поля:
Таблица 1:
Asset_Value Contract_Value
-------------------------------
0 NULL
NULL 200
0 NULL
И запрос:
Select
Asset_Value, Contract_Value,
Case
when Asset_Value is null
then 1
else 0
end As Ind_ForNullA,
Case
when Contract_Value is null
then 1
else 0
end As IndForNullC
from
table1
Тем не менее, я получаю странные результаты:
Asset_Value Contract_Value Ind_ForNullA IndForNullC
----------------------------------------------------
0 NULL 1 1
NULL 200 0 0
0 NULL 0 1
Обновление: никогда не возражай. Дамм запятая была забыта.
3 ответа
Почему вы пытаетесь определить что-то как NULL- что уместно - но, в этом или том или ином случае, изменить его на единицу или ноль (попытка логического выражения, я думаю)- что неуместно?
Что вы будете делать дальше: решите, что в третьем отчете вы хотите иметь РЕАЛЬНОЕ логическое значение, которое отображает ИСТИНА или ЛОЖЬ?
Используйте NULL последовательно, во всем приложении, везде или нет. Тем не менее, НЕ СМЕШАЙТЕ И СРАВНИТЕ ПАРАДИГМЫ и ожидайте последовательных результатов Кроме того, постарайтесь не полагаться на CASE: есть очень, очень законная причина полагаться на это - особенно на что-то более простое, чем то, что вы делаете.
К вашему сведению, единственная причина, по которой я могу понять, почему вы хотели бы, чтобы это поле "индикатор", состояло в том, чтобы вы могли проверить, является ли INDICATOR_A = 1. Однако, поскольку вы можете проверить ASSET IS NULL, зачем вообще беспокоиться? НИКОГДА не вводите посторонние механизмы, когда нет непреодолимой причины для этого.
Попробуйте использовать функцию ASCII
ASCII (символьное выражение)
Используя эту функцию, вы можете понять, что на самом деле является символом в столбце Asset_Value: например, значение NULL должно иметь код ASCII: '00' Таблица с символьным кодом ASCII