来自IIF和ISNULL的意外结果

时间:2017-05-31 14:20:37

标签: ms-access

在我评估的记录上使用下面的代码时,返回NA,这就是我想要的[actual_ssd](在这种情况下)为null

Switch(
[Comm_Type]="Maya",CVDate(DateAdd("m",6,[actual_ssd])),
[Comm_Type]="Sapphire",IIf([Tariff_length]=12,CVDate(DateAdd("m",12,[actual_ssd])),CVDate(DateAdd("m",24,[actual_ssd]))),
[Comm_Type]="Cobalt",IIF(ISNULL([actual_ssd]),"NA","Test")
)

但是,如果[actual_ssd]不为null,我希望[actual_ssd]返回,但是当我将代码更改为: -

Switch(
[Comm_Type]="Maya",CVDate(DateAdd("m",6,[actual_ssd])),
[Comm_Type]="Sapphire",IIf([Tariff_length]=12,CVDate(DateAdd("m",12,[actual_ssd])),CVDate(DateAdd("m",24,[actual_ssd]))),
[Comm_Type]="Cobalt",IIF(ISNULL([actual_ssd]),"NA",[actual_ssd])
)

... Access在查询结果中返回#Error。

任何人都可以确认为什么会发生这种情况([Comm_Type]是“Cobalt”)?

2 个答案:

答案 0 :(得分:1)

你不能混合日期和字符串,实际上不需要CVDate:

Switch(
[Comm_Type]="Maya",DateAdd("m",6,[actual_ssd]),
[Comm_Type]="Sapphire",DateAdd("m",IIf([Tariff_length]=12,12,24),[actual_ssd]),
[Comm_Type]="Cobalt",IIf([actual_ssd] Is Null,"NA", Format([actual_ssd],"yyyy-mm-dd"))
)

答案 1 :(得分:0)

查询中的正确格式为

IIf([actual_ssd] Is Null,"NA",[actual_ssd])

IsNull()仅适用于VBA