检查Access SQL中的Null值时出现奇怪的行为

时间:2013-10-23 15:22:51

标签: sql ms-access-2010 phone-number

我遇到过滤掉没有价值的电话号码的问题,即:

(___) ___ - ____

我在WHERE子句中尝试了这个以获取具有完整电话号码的所有值:

WHERE WRT_Phone <> null;

这使我能够获得所有具有完整价值的电话号码。但是,当我尝试

WHERE WRT_Phone = null;

在结果表中没有填充任何内容。是否有任何功能可用于将区号转换为数字或功能以检查电话号码数据类型是否为空?

另外,我使用Access 2010来执行SQL语句。

2 个答案:

答案 0 :(得分:2)

检查空值的语法是:

WHERE WRT_Phone IS null;

答案 1 :(得分:2)

要检查空值,您需要使用IS NULL

WHERE WRT_Phone IS NULL

事实上,要检查not null,您应该在技术上使用IS NOT NULL

WHERE WRT_Phone IS NOT NULL

在这里发生了一些奇怪的奇怪(Access特有的?),因为你不应该用WHERE WRT_Phone <> null得到任何结果。


一般来说,当NULL存在于布尔运算符的任一侧或作为表达式的一部分时,整个事物的计算结果为NULL(出于WHERE子句的目的,它被认为是FALSE ):

  • 在非空记录中:
    • WRT_Phone = NULL扩展为'foobar' = NULL ,等于NULL - &gt;没有记录返回
    • WRT_Phone <> NULL扩展为'foobar' <> NULL ,等于NULL - &gt;没有记录返回
  • 同样,在空记录中:
    • WRT_Phone = NULL扩展为NULL = NULL ,等于NULL - &gt;没有记录返回
    • WRT_Phone <> NULL扩展为NULL <> NULL ,等于NULL - &gt;没有记录返回