Вернуть данные, чей день рождения сегодня
Я пытаюсь установить запрос, который потянет всех клиентов, чей день рождения сегодня. я использую phpmyadmin
localhost
с помощью Unix socket
день рождения установлен как DATE
,
Все, что мне нужно, это возвращение firstname (emp.emp_firstname as
имя)
, lastname (emp.emp_lastname as
Фамилия)
а также date of birth (emp_birthday as 'dob')
5 ответов
Простое решение будет выглядеть так:
SELECT
emp_firstname AS first_name,
emp_lastname AS last_name,
emp_birthday AS dob
FROM
emp
WHERE
MONTH(emp_birthday)=MONTH(CURDATE())
AND DAY(emp_birthday)=DAY(CURDATE())
или если вы хотите учесть также високосные годы, вы можете использовать это:
SELECT
emp_firstname AS first_name,
emp_lastname AS last_name,
emp_birthday AS dob
FROM
emp
WHERE
emp_birthday +
INTERVAL
YEAR(CURDATE())-YEAR(emp_birthday) +
(MONTH(emp_birthday)<MONTH(CURDATE())
OR (MONTH(emp_birthday)=MONTH(CURDATE()) AND DAY(emp_birthday)<DAY(CURDATE())))
YEAR = CURDATE()
Если чья-то дата рождения 29 февраля, а сегодня 28 февраля и этот год не високосный, мой последний запрос будет считать его / ее день рождения сегодняшним днем.
Мой второй запрос также может быть упрощен следующим образом:
SELECT
emp_firstname AS first_name,
emp_lastname AS last_name,
emp_birthday AS dob
FROM
emp
WHERE
(MONTH(emp_birthday)=MONTH(CURDATE())
AND DAY(emp_birthday)=DAY(CURDATE()))
OR (DAY(LAST_DAY(emp_birthday))=29
AND DAY(emp_birthday)=29
AND DAY(LAST_DAY(CURDATE()))=28);
select emp_firstname as first_name,
emp_lastname as last_name,
emp_birthday as dob
from emp
where month(emp_birthday) = month(curdate())
and day(emp_birthday) = day(curdate())
SQLFiddle demo
select emp_firstname as first_name,
emp_lastname as last_name,
emp_birthday as dob
from emp
where DATE_FORMAT(emp_birthday,'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')
Извините, но почему бы не просто
SELECT
emp_firstname AS first_name,
emp_lastname AS last_name,
emp_birthday AS dob
FROM rmp
WHERE DATE(emp_birthday) = CURDATE();
?
Возможно, у вас возникла проблема с сопоставлением дат. Curdate() возвращает метку полуночи, но сами даты рождения могут не быть метками полуночи по причинам, которые трудно угадать. Попробуй это:
SELECT emp_firstname AS first name,
emp_lastname AS last name,
emp_birthday AS dob
FROM emp
WHERE emp_birthday >= curdate()
AND emp_birthday < curdate() + INTERVAL 1 DAY