Диапазон дат MS Access Query, когда последняя дата не найдена - PullRequest
2 голосов
/ 14 марта 2020

У меня следующий запрос на обновление в 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#));

Это работает, пока не найдена конечная дата в диапазоне. Например, если 7 мая 2004 года нет в наборе данных, то обновление продолжается до следующей конечной даты, в этом случае 30.04.2005. Я бы предпочел, чтобы это закончилось на последнем свидании в ассортименте. Например, если данные закончились 21.04.2004, это будет последнее поле, обновленное в период с 11/16/5/7/2004. Затем запрос продолжит обновляться снова, начиная с 30.10.2004.

Я пробовал <и <= </p>

Спасибо

1 Ответ

1 голос
/ 14 марта 2020

Вам не хватает некоторых скобок, которые влияют на порядок оценки, вызывая поведение, о котором вы сообщаете.

Вам нужно, чтобы каждая из BETWEEN частей была полностью оценена перед * Опция 1004 * оценивается, и вам необходимо убедиться, что оценка выполнена, заключив выражения 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#)
  );
...