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

Например: 31 декабря - это период с 26 декабря 2016 года по 2 января 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: (рецепт)

id | имя | день (int) | месяц (целое)

1 | ххх | 31 | 12

1
HichamEch 9 Янв 2017 в 15:25
Тип данных дня столбца? Отметьте используемые вами базы данных. (Там есть некоторый не-ANSI SQL.)
 – 
jarlh
9 Янв 2017 в 15:27
Похоже на MySQL.
 – 
Tim Biegeleisen
9 Янв 2017 в 15:28
Я использую базу данных mysql: table1: -id -date_start (date) -date_end (date) table2: - id - day (int) - month (int)
 – 
HichamEch
9 Янв 2017 в 15:31
3
Образцы данных и желаемые результаты действительно помогут объяснить, что вы пытаетесь сделать.
 – 
Gordon Linoff
9 Янв 2017 в 15:32
2
Почему вы не присоединяетесь к этим двум столам?
 – 
a_horse_with_no_name
9 Янв 2017 в 15:33

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'

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

2
Tim Biegeleisen 9 Янв 2017 в 15:30
У меня есть два столбца day_col и month_col
 – 
HichamEch
9 Янв 2017 в 15:30
Не делай этого! Это очень усложняет работу со свиданиями. Просто сохраните как datetime, и тогда мой ответ должен работать "из коробки".
 – 
Tim Biegeleisen
9 Янв 2017 в 15:33
ДА, не делайте этого, если вы дизайнер таблиц. Но вы можете использовать два целочисленных значения для сборки типа данных даты, а затем использовать сравнение между ними. есть много способов сделать это, но без значения года вам придется принять тот же год.
 – 
Rawheiser
9 Янв 2017 в 15:34