未找到最后日期时的 MS Access 查询日期范围
MS Access Query date range when last date not found
我在 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#));
在找不到范围内的结束日期之前,此方法一直有效。例如,如果 5/7/2004 不在数据集中,则更新将继续到下一个结束日期,在本例中为 4/30/2005。
我希望它在范围内的最后一个日期结束。例如,如果数据在 2004 年 4 月 21 日结束,那么最后一个字段将在 11/16/ 和 5/7/2004 之间更新。然后,查询将从 2004 年 10 月 30 日开始再次更新。
我试过 < 和 <=
谢谢
您缺少一些影响评估顺序的括号,导致您报告的行为。
你想要的是在评估 OR
选项之前完全评估每个 BETWEEN
部分,并且你需要确保通过围绕 [=11] 来完成评估=] 括号中的表达式以保证计算顺序。
这应该更正它(未经测试,因为您没有提供创建测试用例所需的测试数据)。
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 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#));
在找不到范围内的结束日期之前,此方法一直有效。例如,如果 5/7/2004 不在数据集中,则更新将继续到下一个结束日期,在本例中为 4/30/2005。 我希望它在范围内的最后一个日期结束。例如,如果数据在 2004 年 4 月 21 日结束,那么最后一个字段将在 11/16/ 和 5/7/2004 之间更新。然后,查询将从 2004 年 10 月 30 日开始再次更新。
我试过 < 和 <=
谢谢
您缺少一些影响评估顺序的括号,导致您报告的行为。
你想要的是在评估 OR
选项之前完全评估每个 BETWEEN
部分,并且你需要确保通过围绕 [=11] 来完成评估=] 括号中的表达式以保证计算顺序。
这应该更正它(未经测试,因为您没有提供创建测试用例所需的测试数据)。
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#)
);