【问题标题】:MS Access Query using UCase function in WHERE clause does not return nulls在 WHERE 子句中使用 UCase 函数的 MS Access 查询不返回空值
【发布时间】:2014-08-28 20:24:03
【问题描述】:

我正在尝试从名为 SurveyedBy 的字段中检索不包含单词“survey”的 MS Access 表中的数据。为了限制结果,我使用 WHERE 子句开发了以下查询:

SELECT PropertyNumber, PropertyOwner, EnteredBy, EnterDate, SurveyedBy, SurveyDate, YearBuilt 
FROM MarshallSwift 
WHERE (LCase([SurveyedBy]) Not Like "*survey*");

但是,当我运行查询时,它不会在该字段中返回任何带有 null 的记录。我尝试将 UCase 函数与“SURVEY”一起使用,但仍然没有得到任何 SurveyedBy 字段为空的记录。

我找到的最接近答案的是:Access And/Or exclusions。但是,我正在使用 DAO。我确实尝试使用 % 作为通配符,但结果是一样的。

我很困惑,因为UCase函数应该根据这个返回null:http://office.microsoft.com/en-us/access-help/ucase-function-HA001228930.aspx。也许我不理解 WHERE 子句?任何想法都非常感谢。

谢谢。

【问题讨论】:

  • 已修复。我按照@Fionnuala 和 GordonLinoff 的建议运行了查询。两者都为我工作。我投票给 GordonLinoff 的回复作为答案,因为它解决了我对 Null 的一些问题。谢谢大家。

标签: sql ms-access


【解决方案1】:

NULL“失败”除IS NULL 之外的所有测试。明确检查:

WHERE (LCase([SurveyedBy]) Not Like "*survey*") or SurveyedBy is null

【讨论】:

  • 因此,即使 Not Like 包含在 WHERE 标准中,除非我使用 Is Null 进行检查,否则 Null 将始终无法通过该测试?
  • NULL 的任何比较都会返回“未知”。对于 SQL 中的比较,“未知”被视为 false。这一点没有任何含糊之处。 NULLlikenot like 返回“未知”,就像 =<><> 等一样。
  • 这实际上是有道理的。我将查询与 Is Null 一起运行,它工作得很好。谢谢。
【解决方案2】:

Null 不等于任何东西,也不等于任何东西,试试:

WHERE (LCase([SurveyedBy] & "") Not Like "*survey*");

这将使 SurveyedBy 成为一个空字符串。如果您愿意,也可以查看 Nz (http://www.techonthenet.com/access/functions/advanced/nz.php)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多