检查 MS Access SQL 语句中的空值

Posted

技术标签:

【中文标题】检查 MS Access SQL 语句中的空值【英文标题】:check for null value in MS Access SQL statement 【发布时间】:2013-10-15 20:41:44 【问题描述】:

以下查询未在我的 ms access 2010 数据库中返回 CurrentVisitor 的值:

SELECT h.ClientNumber, IIf(h.CheckoutDate=null,"Yes","") AS CurrentVisitor 
FROM VisitsTable AS h 
INNER JOIN (
    SELECT ClientNumber, MAX(LastVisitDate) AS LastVisitStart 
    FROM VisitsTable 
    GROUP BY ClientNumber)  
    AS t 
ON (h.LastVisitStart = t.LastVisitStart) AND (h.ClientNumber = t.ClientNumber);

我认为原因是If()操作中对null的检查没有正确写入。谁能告诉我如何解决这个问题?

【问题讨论】:

【参考方案1】:

使用

Is Null

而不是

= Null

【讨论】:

+1。并感谢答案。感谢您快速正确的回复。 IIf(IsNull(...), ..., ...) 本来是更传统的做法,但如果 Is Null 有效,那我该挑剔谁? @GordThompson - 你为什么说“更传统”?除非事情发生了变化,否则“Something Is Null”是纯 SQL,“IsNull(Something)”(在 JET 上下文中)VBA,如果可以的话,最好使用纯 SQL。 IIf() 已经相当特定于 Access SQL 和 VB*(与 T-SQL 中的 CASE ... WHEN ... 相比)所以 IsNull() 是像我这样的老手会倾向于编写它。但就像我说的,“如果它有效......”(我已经赞成你的答案)。 @GordThompson - 当然,我们正在处理 Access SQL,但这仍然不会影响我对 Is Null 而非 IsNull 的偏好(这就是我将“在 JET 上下文中”放入的原因)。此外,Access SQL IIf 与 Access VBA IIf 不同,我希望您知道(SQL 一短路,VBA 一短路 - 相当烦人 - 没有)。

以上是关于检查 MS Access SQL 语句中的空值的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 2008 中的空值处理

使用mysql中的select语句替换sql中的空值?

PL/SQL查询中的空值问题

检查输入字段中的空值的正确方法是啥[重复]

连接到 ODBC 时出现 MS Access 错误

如何在 MS Access 2010 中的单元格中显示空值