Проблема с нулем в запросе SQL? - PullRequest
0 голосов
/ 31 марта 2011
select 
    case 
       when ''!='abcd'
           then 'nodate'
       else 'date'
    end;

Здесь я надеюсь, что '' обозначает ноль, но когда я выполняю этот запрос, я получаю 'date' как вывод, а не 'nodate'. В чем проблема в этом запросе? Почему ''!='abcd' проверка состояния становится правдой?

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

Посмотрев на комментарии к этому ответу, вот объяснение -

В вашем примере '' рассматривается как NULL в Oracle, и, следовательно, '' != 'abcd' оценивается как UNKNOWN, что является причиной того, что возвращается результат 'else clause' (а не 'when claus') результат).

Если вы хотите проверить какой-то столбец на NULL, явно укажите это.

...case when columnName is NULL then ... else ... end

или если вы проверяете, чтобы какое-то значение столбца было 'abcd', тогда используйте -

...case when columnName != 'abcd' then ... else ... end
1 голос
/ 31 марта 2011

Если вы хотите проверить NULL, попробуйте это:

value IS NULL

Итак, если вы хотите заменить '' на NULL, не ставьте NULL != 'abcd', а:

'abcd' IS NOT NULL


если там есть переменная, а не '', попробуйте:

IF (l_variable != 'abcd) or (l_variable IS NULL)

Однако было бы лучше опубликовать полный код, а не его измененную часть.

0 голосов
/ 31 марта 2011

Я думаю, что вы хотите

случай, когда YourColumn равен null, тогда 'nodate' else 'yes date' end

0 голосов
/ 31 марта 2011

используйте NULL, чтобы проверить, является ли значение NULL, также см. http://www.dba -oracle.com / t_case_statement_else_null_value.htm

...