【问题标题】:MS Access Query date range when last date not found未找到最后日期时的 MS Access 查询日期范围
【发布时间】:2020-03-14 00:01:57
【问题描述】:

我在 MS Access 2013 中有以下更新查询

UPDATE WXObs SET WXObs.SnowFlag = 1     
WHERE (((WXObs.StationID) ="451409") And(
(WxObs.ObsDate) Between #1/3/2003# AND #3/29/2003# OR
(WxObs.ObsDate) Between #11/16/2003# AND #5/7/2004# OR
(WxObs.ObsDate) Between #10/30/2004# AND #4/30/2005#));

这一直有效,直到找不到范围内的结束日期。例如,如果 2004 年 5 月 7 日不在数据集中,则更新将继续到下一个结束日期,在本例中为 2005 年 4 月 30 日。 我希望它在范围内的最后一个日期结束。例如,如果数据在 2004 年 4 月 21 日结束,那将是 2004 年 11 月 16 日到 2004 年 5 月 7 日之间更新的最后一个字段。然后查询将从 2004 年 10 月 30 日开始再次继续更新。

我试过

谢谢

【问题讨论】:

    标签: sql ms-access ms-access-2013


    【解决方案1】:

    您缺少一些影响评估顺序的括号,从而导致您报告的行为。

    您想要的是在评估 OR 选项之前完全评估每个 BETWEEN 部分,并且您需要确保通过将 BETWEEN 表达式括在括号中来完成评估,以保证评估顺序。

    这应该更正它(未经测试,因为您没有提供创建测试用例所需的测试数据)。

    UPDATE WXObs SET WXObs.SnowFlag = 1     
    WHERE 
      (WXObs.StationID ="451409") 
    And
      (
       (WxObs.ObsDate Between #1/3/2003# AND #3/29/2003#) OR
       (WxObs.ObsDate Between #11/16/2003# AND #5/7/2004#) OR
       (WxObs.ObsDate Between #10/30/2004# AND #4/30/2005#)
      );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      相关资源
      最近更新 更多