【问题标题】:Strange behavior when checking for Null values in Access SQL [duplicate]在 Access SQL 中检查 Null 值时的奇怪行为 [重复]
【发布时间】:2013-10-23 15:22:50
【问题描述】:
我在过滤掉没有价值的电话号码时遇到问题,即:
(___) ___ - ____
我在 WHERE 子句中尝试了这个来获取所有具有完整电话号码的值:
WHERE WRT_Phone <> null;
这使我能够获得所有具有完整价值的电话号码。但是,当我尝试
WHERE WRT_Phone = null;
结果表中没有填充任何内容。是否有任何功能可用于将区号转换为数字或检查电话号码数据类型是否为空的功能?
另外,我正在使用 Access 2010 来执行 SQL 语句。
【问题讨论】:
标签:
sql
ms-access-2010
phone-number
【解决方案1】:
检查空值的语法是:
WHERE WRT_Phone IS null;
【解决方案2】:
要检查空值,您需要使用IS NULL:
WHERE WRT_Phone IS 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 -> 没有返回记录
-
WRT_Phone <> NULL 扩展为 'foobar' <> NULL 等于 NULL -> 没有返回记录
- 同样,在空记录中:
-
WRT_Phone = NULL 扩展为 NULL = NULL 等于 NULL -> 没有返回记录
-
WRT_Phone <> NULL 扩展为 NULL <> NULL 等于 NULL -> 没有返回记录