Heim > Datenbank > MySQL-Tutorial > Wie berechnet man das Alter in Jahren anhand eines Geburtsdatums in SQL Server genau?

Wie berechnet man das Alter in Jahren anhand eines Geburtsdatums in SQL Server genau?

DDD
Freigeben: 2025-01-22 13:41:10
Original
101 Leute haben es durchsucht

How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage