2011-12-08 14 views
1

私はMySQLでのテーブルがあります。平均してドッグイヤー生年月日クエリ

---Dogs--- 
id  int 
birthdate date 

を、犬は毎年、その生活に7年を追加します。 基本的には、今日は犬の実際の誕生日か、犬の誕生日かどうかを知りたいと思います。それは各犬の誕生日の間に約52日間です。私はどのようにこのクエリを書くのか分かりません。

私は行がそれは次のようになります返さたい:

|-----------------| 
| id | birthdate | 
|-----------------| 
| 40 | 2003-12-08 | 
| 59 | 2007-12-08 | 
| 87 | 2005-06-07 | <- 
| 33 | 2009-11-05 | <- Not sure if these would be accurate but want them to 
| |   | return if today worked out being their 'dog birthday' 

また、彼らの実際の誕生日は、はるかに重要な私にはあります。私はdate_diff計算に頼っていません。生年月日=今日または生年月日=計算日。

私はそれを一緒に覗いたと思います。私はこれをしなかったし、それは私が望むよう動作しているようだ:それは人間であるかのよう

select distinct(d.id) from Dogs d 
where MONTH(CURDATE()) = MONTH(d.birthdate ) 
AND DAYOFMONTH(CURDATE()) = DAYOFMONTH(d.birthdate) 
or 
datediff (curdate(), d.birthdate) % 52 = 0 
+0

"modulo operator mysql"を検索し、それが何かを開始するかどうかを確認してください。それ以外の場合は、日付の算術演算によってすべての犬の誕生日を持つサブクエリを作成し、関心のある日がそのテーブルにあるかどうかを確認できます。あなたの質問には何をしたいですか?犬の誕生日を今日のすべての犬のように見せてください。返される行の例を挙げて、各行にどの列があるかを示します。 –

答えて

3

使用係数を掛け: -

select id 
from Dogs 
where datediff (curdate(), birthday) %52 = 0; 
0

がまったく同じ計算を行いますが - それから7

+0

それは、犬が中間の誕生日なしに7歳から14歳にまっすぐに行くことを意味するでしょうか? –

関連する問題