SQL 中基於出生日期的準確年齡計算要求生日欄位具有有效的 datetime
或 date
資料類型。 如果您的出生日期列目前為 nvarchar(25)
,您必須先將其轉換為適當的日期格式。
假設此轉換完成,讓我們檢查一下有效的年齡計算方法:
方法 1:簡化方法(近似)
此方法使用 DATEDIFF
找出目前日期和出生日期之間的小時差,然後除以一年中的大約小時數 (8766.0):
SELECT DATEDIFF(hour, @dob, GETDATE())/8766.0 AS AgeYearsDecimal
這會產生十進制年齡,但由於每月天數和閏年的變化,其準確性受到限制。
改良且更精確的方法:
整數年齡計算:
此方法計算整年年齡:
SELECT (CONVERT(int,CONVERT(char(8),@Now,112))-CONVERT(char(8),@Dob,112))/10000 AS AgeIntYears
精確的十進制年齡計算:
為了獲得更精確的十進制年齡,建議使用這種改進的方法:
SELECT 1.0* DateDiff(yy,@Dob,@Now) +CASE WHEN @Now >= DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)) THEN ( 1.0 * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now) / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1)) ) ELSE -1 * ( * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now) / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1)) ) END AS AgeYearsDecimal
這種先進的方法考慮了閏年,並提供了高度準確的十進制年齡表示。 對於需要精確年齡計算的情況,這是首選方法。
以上是如何使用 SQL 準確計算從出生日期算起的年齡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!