2012-03-14 5 views
3

次のクエリでは、うるう年は考慮されていません。うるう年のMysql Dayofyear

SELECT  e.id, 
      e.title, 
      e.birthdate 
FROM  employers e 
WHERE  DAYOFYEAR(curdate()) <= DAYOFYEAR(e.birthdate) 
AND   DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(e.birthdate) 

だから、このクエリでうるう年に生まれている誰かの誕生日は、非閏年で異なるDAYOFYEARを持っています。

閏年でも動作するようにクエリを調整するにはどうすればよいですか?

私が持っているMySQLのバージョンは次のとおりです。5.0.67

+0

は、まずあなたが 'DAYOFYEAR'機能のバグを主張しようとしていた時に思った問題に対処信じています。だからもちろん、DAYOFYEARはうるう年に違います。なぜそれが問題なのか説明する必要があります。 – Alnitak

+0

そのクエリで正確に何を達成しようとしていますか? –

+1

作品を定義します。もちろんDayOfYearはうるう年に違いますが、そこにもう一日あります。 –

答えて

7

NOW()が非うるう年2011ある場合は、問題はあなたが生まれた年に対してDAYOFYEARを使用しているため、余分な一日になります2月29日後にうるう年に生まれた誰から生じます。あなたがDAYOFYEARを行う

DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92 
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91 

は、あなたは現在の年からの誕生日、出産のない年が必要です。

ので、代わりに:

DAYOFYEAR(e.birthdate) 

あなたはこのように、今年に変換することができます:

'2004-04-01' 

へ:の誕生日を変換

DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR)) 

'2011-04-01' 

だから、ここで変更クエリです:2月29日に生まれた

SELECT  e.id, 
      e.title, 
      e.birthdate 
FROM  employers e 
WHERE  DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR)) 
AND   DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR)) 

人々はまだ日60非閏年の3月1日、に分類されます。ここで

1

通常の年で365日、閏年では366があります。通常の年には、3月1日がその年の60日目になります。うるう年には、2月29日がその年の60日目になります。 MySQLの機能は一貫しています。

あなたはが本当にはそれがために持っているよりも、それをより複雑にしたい場合はcurdate()がより大きいか、3月1日に等しく、curdate()がうるう年でない場合、あなたはDAYOFYEAR(curdate())に一日追加することができますが。しかし、私はそれをすることをお勧めしません。

+0

私は機能が矛盾しているとは言いませんでした。私のスタートポストに私のコメントを読んでください! – sanders

1

は私が正しく理解していれば、あなたが持っている問題があるため、あなたの誕生日は3月1日であればということである

-今日-使用-PHP-と-mysqを祝う

How to find the Birthday of FRIENDS Who are celebrating today using PHP and MYSQL 関連ソリューションですあなたは年の第n番目の日を探しています、あなたは時々間違った日になっています。

は、私は上記の溶液中のクエリは、[OK]