未找到最后日期时的 MS Access 查询日期范围

Posted

技术标签:

【中文标题】未找到最后日期时的 MS Access 查询日期范围【英文标题】:MS Access Query date range when last date not found 【发布时间】: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 日开始再次继续更新。

我试过

谢谢

【问题讨论】:

【参考方案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#)
  );

【讨论】:

以上是关于未找到最后日期时的 MS Access 查询日期范围的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 日期范围函数减慢查询速度

查询未在MS-Access中使用日期条件

iif 日期超过两次 MS-Access [关闭]

MS-Access 中的多个日期范围

根据表单字段中提供的日期查询 MS Access 中的最新记录

MS Access:从日期时间值返回特定日期的查询