2010-10-13 54 views
21

您好我想更新一个表作为如下与空更新列中的值

update userloginstats set logouttime= sysdate where logouttime= null; 

但它没有与空值更新的列。 出了什么问题

+1

<抵制诱惑,添加另一个答案,说完全一样的东西...> – 2010-10-14 03:36:19

回答

42

将其更改为

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

NULL是一个特殊的价值,我们不能与它使用普通的=操作。

Oracle documentation for NULL

为了测试空值,使用只有比较条件IS NULL和IS NOT NULL。如果您使用任何其他空值的条件并且结果取决于null的值,则结果为UNKNOWN,因为null表示缺少数据,则不能将等于或不等于任何值或等于零

3

logouttime is null而不是= nullnull永远不会等于任何东西,甚至不是自己。因此,运营商is

2

您需要使用is null= null

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

你不能用= NULL值相比较。

使用此:

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

空值,你必须使用 “IS NULL” 或 “IS NOT NULL”,而不是=运算符。这是因为null在技术上既不是真的也不是假的,而是两者都没有价值。

大多数编程语言通常关联空虚假为了方便(从而使使用=运算符),但SQL需要一个更纯粹的方式,或对或错。