返回今天生日的数据

use*_*420 1 mysql phpmyadmin unix-timestamp

我正在尝试设置一个查询,以便拉出今天生日那天的所有客户.我正在使用phpmyadmin localhostvia Unix socket,生日被设置为DATE.

所有我需要的是返回的firstname (emp.emp_firstname as第一个名字),lastname (emp.emp_lastname as姓氏)date of birth (emp_birthday as 'dob')

jue*_*n d 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())
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示

  • 我认为emp_birthday是出生日期所以它不会匹配curdate() (2认同)

fth*_*lla 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())
Run Code Online (Sandbox Code Playgroud)

或者如果你想考虑闰年,你可以使用这个:

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()
Run Code Online (Sandbox Code Playgroud)

如果某人的出生日期是2月29日,而今天是2月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);
Run Code Online (Sandbox Code Playgroud)