我在ms-access-2010中的sql查询中使用了IIF(expression , truePart , falsePart)
。我还找到了另一个运算符NZ(expression,falsePart).
我想知道哪个运算符在时间和空间复杂性方面更快以及如何运行?
示例如果我想从具有10k记录的表中获取记录。哪个来自上面的运营商更好用?
答案 0 :(得分:1)
每个的执行几乎相同。
在查询中 - 我认为有一些问题很突出。 对我来说,这些是返回的数据类型和函数的本机状态。
立即If保留数据类型。不仅如此 - 您可以使用它来强制数据类型。如果您想要一个Integer或一个Date,那么您可以将其作为返回参数传递。 Nz为您提供了它想要回馈的变体(文本/字符串)。
我提到的另一个问题是可用性。 Immediate If由Jet的表达服务实现。不需要加载完整的Access VBA库来公开它。
换句话说 - 如果您创建一个查询,例如
SELECT * FROM TableName WHERE IIF(FieldName Is Null, 0, FieldName) = 0
然后您可以从Access外部的代码库执行该查询(不需要Access连接)。
Jet将评估该功能。 (并不是说这是一个特别好的查询 - 使用这两个函数实际上很糟糕。)
等效
SELECT * FROM TableName WHERE Nz(FieldName, 0) = 0
依赖于Nz是Access Application对象模型的成员这一事实。它绝对要求它是执行查询的Access。不一定是一个常见的问题,而是一个考虑因素。