2014-05-19 2 views
0

현재 날짜와 월 조합이 포함 된 쿼리에 WHERE 문을 추가하는 클리너/더 짧고 가독성있는 방법이 있습니까?클리너 현재 날짜와 월간 MySQL의 위치

SELECT id, name, dob, (YEAR(NOW()) - YEAR(dob)) AS age 
FROM people 
WHERE MONTH(dob) = MONTH(NOW()) AND DAY(dob) = DAY(NOW()) 

예를 들면;

WHERE dob = THISDAY() 
+0

[codereview.se]에서 질문 할 수 있습니다. – ElGavilan

+1

왜이 접근 방식에 대해 좋아하지 않는 이유가 무엇입니까? –

+0

죄송합니다. 'short/more readble'을 추가하도록 변경했습니다. 나는 코드 리뷰에서와 같이 '깨끗한'것을 의미하지는 않았지만 덜 깔끔한 것을 말합니다. –

답변

0

2 월 29 일에 태어난 사람들은 달력 날짜 (비 윤년 인 경우 5 월 1 일)와 관계없이 일반적으로 60 일째되는 날에 생일을 축하합니다.

하지 짧은 반면,이 방법을 2 월 29 일에 태어난 사람을 두지 않습니다

SELECT id, name, dob, (YEAR(NOW()) - YEAR(dob)) AS age 
FROM people 
WHERE DAYOFYEAR(curdate()) = 
    DAYOFYEAR(DATE_ADD(dob, INTERVAL (YEAR(NOW()) - YEAR(dob)) YEAR)) 

윤년은 이유있다 DAYOFYEAR(curdate()) = DAYOFYEAR(dob) 같은 간단한 방법이 없습니다.

+0

좋습니다. 그러나 나의 유스 케이스는 "누가이 날짜에 등록 했는가"이며, 나는 2 월 29 일에 이미 포기했다. 현재 날짜가 2 월 28 일이면 두 번째 쿼리를 추가 할 수 있습니다. –

+0

이상하게도 "dob"는 "등록일"을 의미합니다. 그것이 "등록 일"인지 "출생일"인지에 관계없이 해결책은 동일하지 않습니까? –

+0

예, 그렇지만 제 조회수/디자인은 비 점프 날에 도약을 허용하지 않습니다. 그래서 나는 디자인을 업데이트하거나 그 사람들을 무시해야한다. 방금 체크를했는데, 25k 명 중 16 명이 29 위를 차지했습니다. –