在 Access 的 IIf 函数中,如何分配空值?

Posted

技术标签:

【中文标题】在 Access 的 IIf 函数中,如何分配空值?【英文标题】:In an IIf function in Access, how do I assign null values? 【发布时间】:2015-12-03 20:43:33 【问题描述】:

我正在 MS Access 的查询中创建一个计算字段 (Field3)。在此示例中,Field2 包含数字和字符值。我希望 Field3 仅包含来自 Field2 的数值,并将所有字符值转换为 Null 值,以便以后可以将 Field3 作为数值字段执行计算。这是在 IIf 函数中,因为如果 Field1 =“AA”,我希望 Field3 仅包含来自 Field2 的值。这是我尝试在查询设计视图的字段行中输入的内容:

Field3: IIf([Field1]="AA",[Field2]*1,NULL)

这有效,除非 Field2 是字符值,然后 Field3 读取“#Error”而不是空白。

如果不满足 IIf 条件,分配 NULL 值的正确语法是什么?

【问题讨论】:

也许这是一个错误的问题 - 看起来 NULL 赋值正在工作,但问题是当 Field2 是字符时,它返回错误而不是转换为 NULL。 下次您提出问题时,请尝试从一开始就包含尽可能多的信息。 This works except where Field2 is a character value 部分 (在我回答问题后添加) 至关重要。 【参考方案1】:

如果您希望表达式仅在 [Field1]="AA" 和 [Field2] 包含数字时返回 [Field2]*1,否则返回 Null,请在条件中使用 IsNumeric() ...

IIf([Field1]='AA' And IsNumeric([Field2]), [Field2]*1, Null)

如果[Field2]*1 的目的是将[Field2] 文本值转换为数字,请考虑使用 Val() 函数...

IIf([Field1]='AA' And IsNumeric([Field2]), Val([Field2]), Null)

【讨论】:

这是我需要的答案 - 谢谢!因为一开始我不确定问题出在哪里,所以我问的不是正确的问题......【参考方案2】:

Null 正确的语法。

但至少在我这台机器上的旧德语 Access 版本中,我需要在查询设计视图中使用分号而不是逗号。

那你可以试试这个吗?

Field3: IIf([Field1]="AA";[Field2]*1;NULL)

在 SQL 视图中,语法与您的问题完全相同:

SELECT IIf([Field1]="aa",[Field2]*1,Null) AS Field3
FROM TestTable;

【讨论】:

我用分号试过,但它给出了“无效语法”错误。当我使用 Field3: IIf([Field1]="AA",[Field2]*1,NULL) 运行查询时,它可以工作,除了它生成 #ERROR 作为值而不是 NULL 值。 您可以尝试切换到 SQL 视图,修改 IIf 使其看起来像我的第二个示例吗?如果查询有效,则切换回查询设计视图,您应该会看到正确的查询设计视图语法。 嗯....我刚刚搜索了“ms access iif”并查看了一些英文 Access 版本的屏幕截图,显然是commas actually work in the English version(当我在德语 Access 中使用逗号时出现语法错误2010)。您使用哪种语言的 Access 版本? 在 SQL 视图中,它与您的示例匹配,但在运行时仍返回 #ERROR 值。我在 Windows 上使用 English Access 2010。

以上是关于在 Access 的 IIf 函数中,如何分配空值?的主要内容,如果未能解决你的问题,请参考以下文章

Access使用记录

MS ACCESS 2016 - 使用 Null 进行查询的标准

怎么设置access查询中空值为0?

如何将 MS Access“IIF”查询转换为 Sql Server 查询?

access 如何用nz函数使空值显示成0?要详细

Access 2010 IIF 查询中的语法