2016-08-10 2 views
1

Ich möchte eine Liste von Namen bekommen, die 14 Jahre alt und 11 Monate alt werden. Kann mir jemand helfen, das untenstehende SQL zu reparieren? Vielen Dank!SQL, um das Alter basierend auf Jahr und Monat zu berechnen

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

Können Sie einfach nicht, wenn DOB Datum niedriger als 'dateadd (Monat, - (12 * 14 + 11), getdate()) '** und ** höher als' dateadd (Jahr, -15, getdate()) '? – Lucbert

+0

Es funktioniert. Vielen Dank! – Ice

Antwort

1

Diese Leute werden 14, 11 Monate, heute.

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

Ich habe es versucht und es hat nicht funktioniert. – Ice

+0

wie? Jeder, der am 9.10.2001 geboren wurde, wäre zurückgekehrt. Hast du an diesem Tag jemanden geboren? – scsimon

+0

ist Ihr DOB-Feld vom Typ DATE? Wenn es varchar ist, müssen Sie es mit 'wo CAST (DOB als Datum) = ...' – scsimon

1

Ich bin nicht sicher, ob Sie <= oder nur < benötigen. Bitte nehmen Sie entsprechende Änderungen vor.

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

Oder Wenn Sie nur für Ergebnisse zwischen einer Spanne von einem Monat suchen, dann:

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

Es funktioniert. Vielen Dank! – Ice

+0

@Ice Wenn es funktioniert, kannst du es bitte als Antwort markieren? –

+0

tat ich. Danke, dass du mich daran erinnerst. – Ice

Verwandte Themen