Выборка дней рождений за N ближайших дней в MySQL

Одним запросом необходимо выбрать из MySql-таблицы все предстоящие дни рождения за n дней. Дата хранится в формате: YYYY-MM-DD.
Задача на первый взгляд тривиальная, но готового и короткого решения сразу не нашел. Вот работоспособный запрос!
SELECT
birthdays_name
FROM
si_birthdays
WHERE
(
date_format(now()+interval 15 day,'%m-%d')>date_format(birthdays_date,'%m-%d')
AND date_format(NOW(),'%m-%d')<date_format(birthdays_date,'%m-%d')
)
OR
(date_format(NOW()+interval 15 day,'%m')='01'
AND date_format(NOW(),'%m')='12'
AND 
   (
   date_format(NOW()+interval 15 day,'%m-%d')>date_format(birthdays_date,'%m-%d') 
   OR
      (
      date_format(NOW(),'%m-%d')<date_format(birthdays_date,'%m-%d')
      AND '12-31'>=date_format(birthdays_date,'%m-%d')
      )
    )
)
ORDER BY birthdays_date ASC
В первом WHERE - условие  выборки дней рождений для большинства случаев (всех кроме тех, когда текущая дата и текущая дата + 15 принадлежат не одному году). Условие определяет, что дата рождения, хранящаяся в базе, больше текущей даты, но меньше текущей даты + 15.
Дальше в OR – условие определяющее, что текущая дата и текущая дата + 15 принадлежат не одному году
После AND идёт условие определяющее, что текущая дата + 15  больше даты рождения хранящейся в базе.
Дальше снова в OR – условие определяющее, что дата рождения, хранящаяся в базе, больше текущей даты, но меньше 31 декабря.

Комментарии

  1. Из года в год этот код ходит .... статье уже 5 лет .... http://pitin.su/news-63-100-0.htm

    ОтветитьУдалить
  2. Да на авторство я и не претендую :) Написано же - чтобы не ломать голову и не искать потом

    ОтветитьУдалить
  3. этот запрос глючит с датой 01.01.XXXX
    если мы , например , еще в YY.12.XXXX

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

LOGOUT JOOMLA

Разработка Плагинов под Джумлу - События

Виртуемарт 2.0.26 - ONE PAGE CHECKOUT