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

如何使用 SQL 準確計算從出生日期算起的年齡?

Linda Hamilton
發布: 2025-01-22 13:32:41
原創
415 人瀏覽過

How Can I Accurately Calculate Age in Years from a Date of Birth Using SQL?

使用 SQL 計算從出生日期算起的年齡:精確方法

SQL 中基於出生日期的準確年齡計算要求生日欄位具有有效的 datetimedate 資料類型。 如果您的出生日期列目前為 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板