Есть ли запись в формате sql, которая может проверять проверку между месяцами? - PullRequest
2 голосов
/ 21 октября 2009

Я храню повторяющиеся события в таблице событий, которые происходят в определенные месяцы года, в любой год и каждый год. Например;

CREATE TABLE events ( 
  event_id tinyint(3) unsigned NOT NULL auto_increment, 
  name varchar(255) NOT NULL, 
  month_from tinyint(3) unsigned NOT NULL, 
  month_to tinyint(3) unsigned NOT NULL, 
  PRIMARY KEY (event_id) ) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

INSERT INTO events 
  (event_id, name, month_from, month_to) 
VALUES 
  (1, 'Event ABC', 5, 11), (2, 'Event XYZ', 12, 4);

Событие ABC - проводится каждый год в течение мая - ноября и Событие XYZ - проводится каждый год в течение декабря - апреля

В моей таблице событий я храню month_from и month_to в виде числовых значений.

Что я хочу сделать - это взять текущий месяц (октябрь) и передать его в SQL-запрос, чтобы он возвратил мне правильное событие «Event ABC». Но я также хочу передать ему в следующем месяце, скажем, февраль, он должен вернуться ко мне "Event XYZ"

Надеюсь, это имеет смысл?

Ответы [ 4 ]

1 голос
/ 22 октября 2009

select * from tbl where (month_from <= $YOUR_MONTH and month_to >= $YOUR_MONTH) or (month_from > month_to and (month_to >= $YOUR_MONTH or month_from <= $YOUR_MONTH)

это также будет работать для диапазонов DEC-APR

1 голос
/ 21 октября 2009

Попробуйте:

 FROM TABLE t
WHERE @month BETWEEN t.month_from AND t.month_to

Если вы хотите передать дату и получить месяц от даты для сравнения:

 FROM TABLE t
WHERE MONTH(@your_date) BETWEEN t.month_from AND t.month_to

Ссылка: МЕСЯЦ

0 голосов
/ 21 октября 2009

Это должно сделать это:

SELECT * FROM events WHERE month_from <= $your_month AND month_to >= $your_month

Вы не ограничены месяцами как целые числа.Вы можете использовать тип данных DATE с MySQL (или эквивалент для вашей базы данных) и использовать тот же запрос, что и выше.Ваша база данных будет «понимать» операторы <,>, = для ваших полей DATE.

0 голосов
/ 21 октября 2009
select * from tbl
where month_from <= <YOUR_MONTH> and month_to >= <YOUR_MONTH>

при условии, что <YOUR_MONTH> является значением, семантически эквивалентным полям month_from и month_to.

ОБНОВЛЕНИЕ: только что заметил второй пример с декабря по апрель. Возможно, вы можете создать два диапазона для события с декабря по декабрь и с января по апрель.

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