2016-04-22 10 views
0

Ich brauche Namen, die age >=70 aus einer Tabelle PERSON und Spalte BIRTHDATE sind (varchar (8)).Erhalten Alter zwischen dem aktuellen Jahr und dem Geburtsdatum, gibt ** "Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus Zeichenkette." **

Ich versuche nur diese Abfrage, bevor ich anfange zu zeigen Alter> = 70.

select DATEDIFF (year , person.BirthDate, GETDATE()) as Age, * from person 

Diese Abfrage gibt

"Fehler bei der Konvertierung, wenn Datum Umwandlung und/oder Zeit aus Zeichenkette."

Wie soll ich das machen? Ich kann wirklich nicht nachdenken. Danke

+0

Was das Format des Datums ist in 'person.BirthDate'? – cdm

+0

Sie können DATEDIFF nicht mit der varchar-Spalte verwenden. Sie müssen varchar in datetime/date umwandeln. – Manoj

+0

Können Sie ein Beispiel dafür angeben, wie die Zeile oder das Tabellenschema aussieht? –

Antwort

1

Es scheint, dass Datum der Geburtsspalte des Varchar-Datentyps ist. Versuchen Sie wandeln es in Datetime

SELECT 
    DATEDIFF (year , cast(person.BirthDate as datetime), 
    GETDATE()) as Age, * 
FROM 
    person 
4

Sie die Abfrage unter

SELECT DATEDIFF(year , Convert(datetime,person.birthdate, 120), GETDATE()) as Age FROM persons 

können dies zuerst Ihre person.birthdate Spalte auf dem neuesten Stand konvertieren und dann den Unterschied finden

+1

ändern darf Aber "DATEDIFF" zählt * Übergänge *. Es bestimmt nicht, was die meisten Menschen als Alter definieren würden. Wenn Sie den obigen Code am 1. Januar dieses Jahres ausführen, wird für eine Person mit dem Geburtsdatum '20151231' die Zahl 1 zurückgegeben. Die meisten Personen halten jemanden, der einen Tag alt ist, nicht für den Wert 1. –

+0

Auch Ihr Tabellenname ist falsch. –

Verwandte Themen