Хранения даты рождения в mysql

Тема в разделе "Базы данных", создана пользователем Juri, 9 дек 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    В общем столкнулся с такой проблемой - не знаю как лучше хранить дату рождения юзверя в базе. Казалось бы ничего сложного, но если пользователь не указывает год рождения, а только месяц и день? Так же стоит задача как потом вытягивать тех людей у которых скажем день рождения должен быть в ближайшие 30 дней или 10?
    Подскажите какой тип данных использовать и каким запросом потом можно вытянуть?
    Заранее спасибо
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    даты рождения как date вроде хватает, а в запросе можно просматривать разницу между датами дня рождения и сегодня в днях, в этом году и в следующем
    и фильтровать где разница от 0 до 30 дней
    Код:
    SELECT *,
    DATEDIFF(CONCAT(YEAR(NOW()), '-', MONTH(birthday), '-', DAY(birthday)), NOW()) diff1,
    DATEDIFF(CONCAT(YEAR(NOW())+1, '-', MONTH(birthday), '-', DAY(birthday)), NOW()) diff2
    FROM birthday
    HAVING (diff1>0 AND diff1<30) OR (diff2>0 AND diff2<30)
    
    datediff возвращает разницу дат в днях, а с concat собираем день рождения для нужного года, так что год не нужен и может быть 0000,
    а если не будет месяца или дня или обоих 0000-00-00 то DATEDIFF вернёт NULL

    тут ещё интересные функции для работы с датами

    http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_dayofyear

    как например to_days конвертирует всю дату в дни, тоже можно использовать.
     
    Juri нравится это.
Статус темы:
Закрыта.