Switch导致#error,为什么以及如何解决它

时间:2010-05-11 22:03:39

标签: sql ms-access

我的表中有3个字段:开始,结束(日期)和长度(数字,可能是空白) 我的目标是使用不存在结束的开始和长度来计算结束日期......

我有:

SELECT Switch((g.length<>0) And IsDate(g.end),DateAdd("m",g.length,g.start)) AS field FROM table g

如果没有开始,结束或长度,Access显示空白 - 这很好。 如果没有结束,但是开始和长度都没问题,则显示计算的日期 - 再次罚款。 但 如果没有结束或长度,但存在启动,则访问显示#Error

我不明白为什么,也无法解决,请帮忙!

1 个答案:

答案 0 :(得分:0)

如果没有结束,但是开始和长度都可以,则显示计算的日期

你确定这一点吗?当我使用start和length的值尝试查询但没有end值时,我得到“field”的Null。

此外,当此条件为True时,您正在调用DateAdd函数:

g.length<>0) And IsDate(g.end)

为了使该条件为True,g.end必须已包含有效日期......但我认为没有想要在已经拥有时执行计算g.end的值。我很困惑。

让我们尝试一种不同的方法。如果此查询返回您想要的内容,那就好了。如果没有帮助我们理解为什么它是不正确的。

SELECT
    d.start,
    d.end,
    d.length,
    IIf(IsDate(d.end), d.end,
    IIf(Nz(d.length)>0, DateAdd("m", d.length, d.start), Null)) AS field
FROM table AS d;