2016-08-10 46 views
1

14歳と11ヶ月になっている名前のリストを取得したいと思います。私は以下のSQLを修正するのに役立つ誰かができますか?ありがとう!年と月に基づく年齢を計算するSQL

SELECT NAME 
FROM TABLE 
WHERE 
(cast(datediff(DAY, DOB, getDate() -1) /(365.23076923074) as int)>=14 
    AND cast(datediff(MONTH, DOB, getDate() -1) % (12) as int)>=11) 
OR  
(cast(datediff(DAY, DOB, getDate() -1) /(365.23076923074) as int)<=15 
    AND cast(datediff(MONTH, DOB, getDate() -1) % (12) as int)<=0) 
+0

あなたは単にDOB日がDATEADD(月、 '未満であるかどうかを確認することはできません - (12 * 14 + 11)、getdate()) '**および** dateadd(year、-15、getdate())より**高いですか? – Lucbert

+0

それは動作します。ありがとうございました! – Ice

答えて

1

これらの人々は今日14,11ヶ月になります。

select name 
from table 
where DOB = cast(dateadd(mm,-11,dateadd(yy,-14,getdate())) as date) 
--this is to eliminate the time on getdate 
+0

私は試してもうまくいかなかった。 – Ice

+0

どうですか? 2001年9月10日に生まれた誰でも返されます。その日に生まれた人がいますか? – scsimon

+0

はDATEタイプのDOBフィールドですか? varcharの場合、CAST(DOBとDATE)= ...の部分でCASTする必要があります。 – scsimon

1

私はあなたが<=またはちょうど<が必要な場合はわかりません。それに応じて変更してください。

select NAME from table Where DOB < = DATEADD(MONTH, -179, GETDATE()) 

それとも、ただ、その後1ヶ月のスパンの間で結果を探している場合:

select NAME from table Where DOB BETWEEN DATEADD(MONTH, -179, GETDATE()) AND DATEADD(MONTH, -180, GETDATE()) 
+0

それは動作します。ありがとうございました! – Ice

+0

@Iceもし問題がなければ、答えとしてマークしてください。 –

+0

しました。思い出させていただきありがとうございます。 – Ice

関連する問題