今日が誕生日のすべてのクライアントをプルするクエリを設定しようとしています。私はphpmyadmin
localhost
viaを使用しています。Unix socket
誕生日は に設定されていDATE
ます。
返す必要があるのは、firstname (emp.emp_firstname as
名)
、lastname (emp.emp_lastname as
姓)
、date of birth (emp_birthday as 'dob')
今日が誕生日のすべてのクライアントをプルするクエリを設定しようとしています。私はphpmyadmin
localhost
viaを使用しています。Unix socket
誕生日は に設定されていDATE
ます。
返す必要があるのは、firstname (emp.emp_firstname as
名)
、lastname (emp.emp_lastname as
姓)
、date of birth (emp_birthday as 'dob')
簡単な解決策は次のようになります。
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()
ある人の生年月日が 2 月 29 日で、今日が 2 月 28 日で、今年がうるう年でない場合、最後のクエリはその人の誕生日を今日と見なします。
私の 2 番目のクエリも次のように簡略化できます。
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 DATE_FORMAT(emp_birthday,'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')
日付の一致で問題が発生している可能性があります。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
申し訳ありませんが、なぜ
SELECT
emp_firstname AS first_name,
emp_lastname AS last_name,
emp_birthday AS dob
FROM rmp
WHERE DATE(emp_birthday) = CURDATE();
?