首頁 > 資料庫 > mysql教程 > 如何使用 SQL 的 getDate() 根據出生日期計算年齡?

如何使用 SQL 的 getDate() 根據出生日期計算年齡?

Mary-Kate Olsen
發布: 2025-01-22 13:47:12
原創
438 人瀏覽過

How to Calculate Age from Date of Birth Using SQL's getDate()?

使用SQL的getDate()函數依出生日期計算年齡

問題:

許多資料庫維護個人信息,包括出生日期。為了準確追蹤記錄管理的年齡,需要將儲存的出生日期轉換為個人的年齡(以年為單位)。

解:

將字串日期轉換為日期資料型態:

  1. 使用CONVERT()函數將varchar類型的出生日期轉換為datetime資料型態:
<code class="language-sql">CONVERT(datetime, DOB)</code>
登入後複製

計算年齡(以年為單位):

  1. 利用DATEDIFF()函數計算目前日期時間(使用getDate()取得)與轉換後的出生日期之間的小時差:
<code class="language-sql">DATEDIFF(hour, CONVERT(datetime, DOB), getDate())</code>
登入後複製
  1. 將小時差除以8766(一年中的小時數)以獲得以小數年份表示的年齡:
<code class="language-sql">DATEDIFF(hour, CONVERT(datetime, DOB), getDate()) / 8766.0</code>
登入後複製

輸出:

<code class="language-sql">SELECT ID, Name, DATEDIFF(hour, CONVERT(datetime, DOB), getDate()) / 8766.0 AS AGE, DOB
FROM [YourTable];</code>
登入後複製

精準度考量:

閏年和精確日期計算會影響精確度。為了提高精度,請考慮以下方法:

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

<code class="language-sql">(CONVERT(int, CONVERT(char(8), @Now, 112)) - CONVERT(char(8), @Dob, 112)) / 10000</code>
登入後複製

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

<code class="language-sql">1.0 * DATEADD(yy, @Dob, @Now)
+ CASE
    WHEN @Now >= DATEFROMPARTS(YEAR(@Now), MONTH(@Dob), DAY(@Dob)) THEN   -- 当年生日已过
        (1.0
        * DATEDIFF(day, DATEFROMPARTS(YEAR(@Now), MONTH(@Dob), DAY(@Dob)), @Now)
        / DATEDIFF(day, DATEFROMPARTS(YEAR(@Now), 1, 1), DATEFROMPARTS(YEAR(@Now) + 1, 1, 1))
        )
    ELSE    -- 当年生日未过
        -1 * (
            -1.0
            * DATEDIFF(day, DATEFROMPARTS(YEAR(@Now), MONTH(@Dob), DAY(@Dob)), @Now)
            / DATEDIFF(day, DATEFROMPARTS(YEAR(@Now), 1, 1), DATEFROMPARTS(YEAR(@Now) + 1, 1, 1))
        )
END</code>
登入後複製

以上是如何使用 SQL 的 getDate() 根據出生日期計算年齡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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