检查MS Access查询中的空值

问题描述:

在SQL Server中,我们可以使用IsNull()函数来检查表达式值是否为null。例如。检查MS Access查询中的空值

Select IsNull(sum(amount),0) as TotalAmount 
    From Payments 

同样,MS Access查询中有任何函数检查null。我需要在MS Access查询中执行相同的语句。

可以告诉我在MS Access中替换IsNull()

感谢分享你的时间。

在Access中的等价物很多,是nz函数。如何使用它here

但是,如果您使用Access作为数据库后端并在您的连接字符串中使用Jet,那么nz将无法提供给您。

+0

感谢hawbsl时使用!但是当我尝试从C#代码使用Nz执行查询时,我得到Nz未定义的异常。 – IrfanRaza 2011-01-28 12:13:13

+1

我发现IsNull()存在于MS Access中。但是当使用来自C#的查询时,我得到这个错误信息 - “在查询表达式中与函数一起使用的错误数量的参数IsNull(sum(amount),0)'” – IrfanRaza 2011-01-28 12:17:19

使用Jet/ACE查询可以重新写为:

SELECT IIf(Sum(amount) Is Null, 0, Sum(amount)) AS TotalAmount 
FROM Payments 

这应该从C#甚至工作,因为Is NullIIf都内置到Jet/ACE。请注意0​​中的空格和缺少括号(它是陈述,而不是函数)。

有两个加奖金使用IIfIs Null相对于即使NzNz是提供给您:

  • 因为所有的处理都在数据库引擎内完成它的执行速度更快(因此它不” t必须对Access库进行函数调用)
  • 它保留字段的原始类型;因为Nz返回一个Variant,捷达/ ACE*结果显示为一个字符串(通常是不是你想要的使用日期,数字,等等打交道时)

UPDATE:艾伦·布朗有excellent primer关于使用IIf,Nz,IsNull()Is Null。我打算将该链接发布为我的原始答案,但我当时找不到该页面。我尽我所能从记忆中获得了最好的回报,但真正的功劳归功于布朗先生。

同样, 也可以在日期和时间排序

.....ORDER BY TRANSDATE ASC,(IIf([PaymentTime] Is Null, '23:59:59', [PaymentTime])) DESC