具有IIF和DATEADD函数的MS Access更新查询

时间:2018-11-07 21:26:39

标签: ms-access dateadd iif-function

我的“ table1”中有6个字段。

  • 当前日期
  • 下一个调整日期
  • 过去了几个月
  • 索引0
  • 索引1
  • 索引2。

我正在尝试为索引1创建一个更新查询,如果(当前日期+经过的月数)<下一个调整日期,则索引1为索引0,如果我不希望索引1保持当前值。

我尝试过

iif(DateAdd("m",[Table1]![Months Elapsed],[Table1]![Current Date])<[Table1]![Next Adjustment Date], [Table1]![Index 0]

我在iif公式中的[Table1]![下一个调整日期]中输入了“我输入的表达式包含无效语法”错误。

2 个答案:

答案 0 :(得分:1)

iif(与结尾)不匹配

SELECT查询中计算语法。然后在您的UPDATE中使用该工作字段表达式。这是我的建议...

SELECT
    IIf
        (
            DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date],
            t1.[Index 0]
        )
FROM Table1 AS t1;

请注意,您的IIf缺少第三个参数,这是当条件(第一个参数)不为True时要返回的值。数据库引擎不会抱怨,在这种情况下将返回Null。另请参见this answer

但是您的描述表明您可能实际上想要这个...

    IIf
        (
            DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date],
            t1.[Index 0],
            t1.[Index 1]
        )

...但是对于UPDATE而言,将条件移至WHERE子句并仅更新那些行对我来说更有意义...

UPDATE Table1 AS t1
SET t1.[Index 1] = t1.[Index 0]
WHERE DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date];

答案 1 :(得分:0)

您没有指定IIf的错误部分。试试这个;

IIf(DateAdd("m",[Table1]![Months Elapsed],[Table1]![Current Date])< [Table1]![Next Adjustment Date], [Table1]![Index 0], [Table1]![Index 1])

但是,我担心您显然存储了“当前日期和月份”字段。这两个不是即时计算出来的吗?他们应该是。