Запросить даты, которые меньше или равны набору диапазонов дат - PullRequest
0 голосов
/ 29 мая 2018

Как запросить даты, которые меньше или равны нескольким датам с помощью одного SQL-запроса?

Мне нужно найти

date <= ('29-05-2018', '30-05-2018', '31-05-2018')

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Самая ограничительная дата, т.е. самая ранняя, будет определять фильтрацию, поскольку любые даты, превышающие эту, будут менее ограничительными.Таким образом, альтернативой использованию ALL будет использование LEAST:

WHERE date <= LEAST('2018-05-29', '2018-05-30', '2018-05-31')

EDIT (Гордоном):

В Oracle это будет:

WHERE date <= LEAST(DATE '2018-05-29', DATE '2018-05-30', DATE '2018-05-31')
0 голосов
/ 29 мая 2018

Вы можете использовать ALL:

Сравнивает значение с каждым значением в списке или возвращается запросом.Должно предшествовать =,! =,>, <, <=,> =. Может сопровождаться любым выражением или подзапросом, который возвращает одно или несколько значений.

date <= ALL('29-05-2018', '30-05-2018', '31-05-2018');

Возможно ли иметь жестко закодированные даты вподзапрос для оператора ALL?

Да, это возможно:

SELECT *
FROM tab_name
WHERE date <= ALL (SELECT some_date_column
                   FROM tab_name_2
                   WHERE ...);

<=>
SELECT *
FROM tab_name
WHERE date <= (SELECT MIN(some_date_column)
               FROM tab_name_2
               WHERE ...);

У меня нет этих датв таблице.Я просто хочу узнать даты, которые лежат с сегодняшнего дня до (сегодня + 30 дней)

SELECT *
FROM table_name
WHERE date BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 30; -- Oracle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...