Как отфильтровать диапазон дат от «дата» — 2 недели и «дата» 2 недели

#sql #date-range #days #exasolution

#sql #диапазон дат #дни #exasolution

Вопрос:

У меня есть таблица, похожая на:

 VALID_FROM | VALID_TO   | stock
2020-10-01 | 2020-10-02 | 10
2020-10-02 | 2020-10-04 | 9
2020-10-04 | 2020-10-08 | 5
...        | ...        |
2020-12-15 | 2020-12-16 | 0
 

Мне нужно установить диапазон дат для определенной даты из:

‘2020-11-26’ — 2 недели / 14 дней ‘2020-11-26’ 2 недели / 14 дней

Я мог бы просто использовать фиксированные даты, например

 SELECT *
FROM table AS t
WHERE t.VALID_FROM >= '2020-11-12'
AND t.VALID_TO <= '2020-12-10'
 

Но диапазон дат может измениться, и я хотел бы просто добавить дни или недели без необходимости каждый раз использовать календарь.

Итак, что-то вроде:

 SELECT *
FROM table AS t
WHERE t.VALID_FROM >= '2020-11-26' - INTERVAL '14' DAY
AND t.VALID_TO <= '2020-11-26'   INTERVAL '14' DAY
 

Но это дает мне сообщение об ошибке:

Функция не поддерживается: невозможно выполнить приведение из ИНТЕРВАЛА DAY (2) ОТ ВТОРОГО (3) до ДВОЙНОГО

Комментарии:

1. Вы можете попробовать DATEADD(d, -14, ‘2020-11-26’) и DATEADD(d, 14, ‘2020-11-26’) с предложением BETWEEN .

Ответ №1:

Попробуйте использовать add_days() функцию:

 WHERE t.VALID_FROM >= add_days('2020-11-26', -14) AND
      t.VALID_TO <= add_days('2020-11-26', -14)
 

Комментарии:

1. Спасибо, до сих пор не знал о add_days().