首頁 >資料庫 >mysql教程 >如何在 SQL Server 中準確計算從出生日期算起的年齡?

如何在 SQL Server 中準確計算從出生日期算起的年齡?

DDD
DDD原創
2025-01-22 13:41:10131瀏覽

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

精確計算SQL Server中出生日期的年齡

問題:

如何在SQL Server中將儲存為nvarchar(25)的出生日期轉換為日期,並隨後計算其對應的年齡(以年為單位)?

範例資料:

ID Name DOB
1 John 1992-01-09 00:00:00
2 Sally 1959-05-20 00:00:00

預期輸出:

ID Name AGE DOB
1 John 31 1992-01-09 00:00:00
2 Sally 64 1959-05-20 00:00:00

答案:精確計算年齡

最初提出的方法在考慮閏年和月份天數不規則性方面面臨挑戰。現代SQL Server版本為我們提供了改進的技術來解決這些複雜性。

計算整數年齡的最佳方法:

此方法簡單直接,但精確度可能略低於小數方法。

<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>

計算小數年齡的最佳方法:

此方法使用DATEDIFF函數和CASE語句精確計算年齡,並考慮生日在當年是否已過。

<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>

請注意,上述程式碼假設DOB列已轉換為DATE型別。 如果DOB仍然是nvarchar(25)類型,您需要在查詢中新增類型轉換,例如:CONVERT(DATE, DOB, 120)。 選擇合適的轉換樣式取決於您的DOB資料的特定格式。 例如,CONVERT(DATE, DOB, 120)適用於'yyyy-mm-dd hh:mi:ss'格式。 您可能需要調整此部分以適應您的資料格式。 最終的查詢應類似於:

<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>

替換YourTable為您的表名。 選擇整數或小數方法取決於您的精確度需求。 小數方法較精確,但整數方法較簡潔。

以上是如何在 SQL Server 中準確計算從出生日期算起的年齡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn