未找到最后日期时的 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 查询日期范围的主要内容,如果未能解决你的问题,请参考以下文章