精確計算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中文網其他相關文章!