MySQL - Найти диапазоны дат, соответствующие списку месяцев - PullRequest
1 голос
/ 02 декабря 2010

У меня есть несколько строк в таблице, каждая из которых содержит дату начала и дату окончания.У пользователя есть флажок для каждого месяца года.Мне нужно определить, какие строки содержат диапазон дат, включающий любой из выбранных пользователем месяцев.

Начальные и конечные месяцы легко проверить, например, MONTH(start_date) IN ($month_list), но этот подход не будет совпадатьлюбые месяцы между двумя датами.

Итак, я полагаю, что я спрашиваю: есть ли способ получить инклюзивные месяцы из диапазона дат исключительно в SQL?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

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

SELECT DISTINCT at.*
FROM a_table at, user_periods up
WHERE at.start_date<=up.end_date
AND at.end_date>=up.start_date
AND up.trans_id=$SOME_VAR

(trans_id просто позволяет использовать таблицу для нескольких операций)

Чтобы свести к минимуму усилие здесь, таблица user_periods должна иметь индекс start_date и end_date, ипохож на a_table.

0 голосов
/ 02 декабря 2010

Может ли что-то подобное помочь?

WHERE 
  MONTH(start_date) < MONTH_YOU_ARE_CHECKING and 
  MONTH() > MONTH_YOU_ARE_CHECKING

Если вам нужно проверить все сразу, вы можете сделать список всех месяцев и после удаления из списка месяц, который выберет пользователь, и после сравнения со списком.Будет лучше с примером псевдокода:)

MONTHS = 1,2,3,4,5,6,7,8,9,10,11,12
USER_SELECTED_MONTHS= 1,6,8,9,12
LIST_TO CHECK = 2,3,4,5,7,10,11

, так что теперь вы можете сделать:

MONTH(start_date) NOT IN (2,3,4,5,7,10,11)

Как вы думаете, это может помочь вам?

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...