Genaues Alter anhand des Geburtsdatums in SQL Server berechnen
Frage:
Wie konvertiere ich ein als nvarchar(25) gespeichertes Geburtsdatum in ein Datum in SQL Server und berechne anschließend das entsprechende Alter in Jahren?
Beispieldaten:
ID | Name | DOB |
---|---|---|
1 | John | 1992-01-09 00:00:00 |
2 | Sally | 1959-05-20 00:00:00 |
Erwartete Ausgabe:
ID | Name | AGE | DOB |
---|---|---|---|
1 | John | 31 | 1992-01-09 00:00:00 |
2 | Sally | 64 | 1959-05-20 00:00:00 |
Antwort: Alter genau berechnen
Die ursprünglich vorgeschlagene Methode war mit Herausforderungen bei der Berücksichtigung von Schaltjahren und Unregelmäßigkeiten bei der Anzahl der Tage im Monat konfrontiert. Moderne SQL Server-Versionen bieten uns verbesserte Techniken zur Lösung dieser Komplexität.
Der beste Weg, das Alter in ganzen Zahlen zu berechnen:
Diese Methode ist einfach und direkt, die Genauigkeit kann jedoch etwas geringer sein als bei der Dezimalmethode.
<code class="language-sql">SELECT (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeIntYears FROM YourTable;</code>
Der beste Weg, das Alter als Dezimalzahl zu berechnen:
Diese Methode verwendet die Funktion DATEDIFF
und die Anweisung CASE
, um das Alter genau zu berechnen und berücksichtigt, ob der Geburtstag im aktuellen Jahr vergangen ist.
<code class="language-sql">SELECT DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsDecimal FROM YourTable;</code>
Bitte beachten Sie, dass der obige Code davon ausgeht, dass die Spalte DOB
in den Typ DATE
konvertiert wurde. Wenn DOB
immer noch vom Typ nvarchar(25)
ist, müssen Sie der Abfrage eine Typkonvertierung hinzufügen, zum Beispiel: CONVERT(DATE, DOB, 120)
. Die Auswahl des geeigneten Transformationsstils hängt vom spezifischen Format Ihrer DOB
Daten ab. Beispielsweise steht CONVERT(DATE, DOB, 120)
für das Format „jjjj-mm-tt hh:mi:ss“. Möglicherweise müssen Sie diesen Abschnitt an Ihr Datenformat anpassen. Die letzte Abfrage sollte etwa so aussehen:
<code class="language-sql">SELECT DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(CONVERT(DATE, DOB, 120)) OR (MONTH(GETDATE()) = MONTH(CONVERT(DATE, DOB, 120)) AND DAY(GETDATE()) < DAY(CONVERT(DATE, DOB, 120))) THEN 1 ELSE 0 END AS AgeYearsDecimal FROM YourTable;</code>
Ersetzen Sie YourTable
durch Ihren Tabellennamen. Die Wahl der Ganzzahl- oder Dezimalmethode hängt von Ihren Präzisionsanforderungen ab. Die Dezimalmethode ist präziser, die Ganzzahlmethode ist jedoch prägnanter.
Das obige ist der detaillierte Inhalt vonWie berechnet man das Alter in Jahren anhand eines Geburtsdatums in SQL Server genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!