2010-10-13 3 views
21

Привет Я хочу, чтобы обновить таблицу, как следующиеUpdate столбцы с нулевыми значениями

update userloginstats set logouttime= sysdate where logouttime= null; 

Но это не обновлялись столбцы с нулевыми значениями. что не так

+1

<сопротивление соблазну добавить еще один ответ, который говорит точно то же самое ...> –

ответ

42

Изменить его

...where logouttime is null; 
        ^^^^^^^ 

NULL это специальное значение, и мы не можем использовать обычный = оператор с ним.

От Oracle documentation for NULL:

Для проверки нулей, используйте только условия сравнения IS NULL и IS NOT NULL. Если вы используете какое-либо другое условие с нулями, а результат зависит от значения null, то результат НЕИЗВЕСТНО, потому что null представляет собой отсутствие данных, нуль не может быть равным или не равным ни одному значению или другому нулю.

3

logouttime is null, а не = null. null никогда не сравнится ни с чем, даже с самим собой. Таким образом, оператор is.

2

Вы должны использовать is null не = null

update userloginstats set logouttime= sysdate where logouttime is null; 
6

Вы не можете сравнить NULLs с =.

Используйте это:

update userloginstats set logouttime= sysdate where logouttime is null; 
0

Для нулей вы должны использовать "IS NULL" или "IS NOT NULL", а не оператор =. Это потому, что null технически не является ни истинным, ни ложным, скорее это отсутствие ценности в любом случае.

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

Смежные вопросы