SQL-запрос НЕ между двумя датами

Я предпочитаю второе также, но у меня нет рациональных аргументов в это время для поддержания той позиции.

15
задан Kelvin 9 November 2009 в 17:16
поделиться

6 ответов

Как насчет попытки:

select * from 'test_table'
where end_date < CAST('2009-12-15' AS DATE)
or start_date > CAST('2010-01-02' AS DATE)

, который вернет все диапазоны дат, которые вообще не перекрывают ваш диапазон дат.

26
ответ дан 1 December 2019 в 01:17
поделиться

То, что вы сейчас делаете, проверяет, не попадают ли ни start_date, ни end_date в диапазон указанных дат.

Я полагаю, что вы действительно ищете запись, которая не соответствует указанному диапазону дат. Если да, используйте запрос ниже.

SELECT * 
    FROM `test_table` 
    WHERE  CAST('2009-12-15' AS DATE) > start_date  AND  CAST('2010-01-02' AS DATE) < end_date
1
ответ дан 1 December 2019 в 01:17
поделиться

Предполагая, что start_date раньше end_date,

interval [start_date..end_date] NOT BETWEEN две даты просто означает, что либо он начинается до 15 декабря 2009 г., либо заканчивается после 01.01.2010. -02.

Затем вы можете просто выполнить

start_date<CAST('2009-12-15' AS DATE) or end_date>CAST('2010-01-02' AS DATE)
0
ответ дан 1 December 2019 в 01:17
поделиться

Ваша логика обратная.

SELECT 
    *
FROM 
    `test_table`
WHERE
        start_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)
    AND end_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)
7
ответ дан 1 December 2019 в 01:17
поделиться

Вы имеете в виду, что диапазон дат выбранных строк не должен лежать полностью в пределах указанного диапазона дат? В этом случае:

select *
from test_table
where start_date < date '2009-12-15'
or end_date > date '2010-01-02';

(Синтаксис выше для Oracle, ваш может немного отличаться).

2
ответ дан 1 December 2019 в 01:17
поделиться

Для перекрытия start_date таблицы должен быть МЕНЬШЕ даты окончания интервала (т.е. он должен начинаться до конца интервала) И end_date таблицы должен быть БОЛЬШЕ, ЧЕМ дата начала интервала. Возможно, вам придется использовать <= и> = в зависимости от ваших требований.

0
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: