1

今日が誕生日のすべてのクライアントをプルするクエリを設定しようとしています。私はphpmyadmin localhostviaを使用しています。Unix socket誕生日は に設定されていDATEます。

返す必要があるのは、firstname (emp.emp_firstname as)lastname (emp.emp_lastname as)date of birth (emp_birthday as 'dob')

4

5 に答える 5

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()

ある人の生年月日が 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);
于 2013-06-28T11:45:41.153 に答える
1
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')
于 2013-06-28T12:22:56.043 に答える
0

日付の一致で問題が発生している可能性があります。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
于 2013-06-28T11:46:52.203 に答える
0

申し訳ありませんが、なぜ

SELECT 
    emp_firstname AS first_name, 
    emp_lastname AS last_name, 
    emp_birthday AS dob
FROM rmp
WHERE DATE(emp_birthday) = CURDATE();

?

于 2013-06-28T13:12:33.030 に答える