精確計算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版本為我們提供了改進的技術來解決這些複雜性。
計算整數年齡的最佳方法:
此方法簡單直接,但精度可能略低於小數方法。
SELECT
(YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE())
計算小數年齡的最佳方法:
此方法使用DATEDIFF
函數和CASE
語句精確計算年齡,並考慮生日在當年是否已過。
SELECT
DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE())
請注意,以上代碼假設DOB
列已轉換為DATE
類型。 如果DOB
仍然是nvarchar(25)
類型,您需要在查詢中添加類型轉換,例如:CONVERT(DATE, DOB, 120)
。 選擇合適的轉換樣式取決於您的DOB
數據的具體格式。 例如,CONVERT(DATE, DOB, 120)
適用於'yyyy-mm-dd hh:mi:ss'格式。 您可能需要調整此部分以適應您的數據格式。 最終的查詢應類似於:
SELECT
DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE())
替換YourTable
為您的表名。 選擇整數或小數方法取決於您的精度需求。 小數方法更精確,但整數方法更簡潔。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3