ホームページ >データベース >mysql チュートリアル >SQLのgetDate()を使用して生年月日から年齢を計算するにはどうすればよいですか?

SQLのgetDate()を使用して生年月日から年齢を計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-22 13:47:12468ブラウズ

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 (1 年の時間数) で割ると、10 進数の年齢が求められます。
<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。