2017-01-09 3 views
1

Как выбрать, где день и месяц между двумя датами:Sql, как выбрать, где день и месяц между двумя датами

, например: 31/декабря между 26/декабрь/2016 и 02/Январь/2017

мой запрос:

select table2.* 
from table1, 
    table2 
where table2.day between DAYOFMONTH(table1.date_start) and DAYOFMONTH(table1.date_end) 
    and table2.month between MONTH(table1.date_start) and MONTH(table1.date_end) 

table1 (бронирование):

-id -date_start (дата) -date_end (дата)

1 | 2016-12-26 | 2017-01-02

table2: (рецепт)

идентификатор | имя | день (int) | месяц (int)

1 | xxx | 31 | 12

+0

Данные типа Column day? Добавьте теги, которые вы используете. (Некоторый там не ANSI SQL.) – jarlh

+0

@a_horse_with_no_name Похож на MySQL. –

+0

Я использую MySQL базы данных: table1: -id -date_start (дата) -date_end (дата) table2: - идентификатор - день (интермедиат) - месяц (целое) – ALWAN

ответ

1

Похоже, вы используете MySQL. Вместо того, чтобы пытаться проверять месяцы и дни отдельно, вместо этого просто используйте BETWEEN с двумя точками, диапазон которых вы хотите захватить.

SELECT t1.* 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.some_col = t2.some_col 
WHERE day_col BETWEEN '2016-12-26' AND '2017-01-02' 

Обратите внимание, что я также добавил условие соединения к вашему запросу, без которого вы будете делать перекрестное соединение, скорее всего, не то, что вы собираетесь.

+0

У меня есть два cols day_col и month_col – ALWAN

+0

Не делайте этого! Это делает работу с вашими датами очень сложной. Просто храните как 'datetime', а затем мой ответ должен работать из коробки. –

+0

ДА, не делайте этого, если вы дизайнер стола. Но вы можете использовать два целочисленных значения для сборки типа данных даты, а затем использовать сравнение. есть много способов сделать это, но без годового значения вам придется принять тот же год. – Rawheiser

Смежные вопросы