ホームページ > データベース > mysql チュートリアル > SQL Server で生年月日から年齢を正確に計算するにはどうすればよいですか?

SQL Server で生年月日から年齢を正確に計算するにはどうすればよいですか?

DDD
リリース: 2025-01-22 13:41:10
オリジナル
101 人が閲覧しました

How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

SQL Server で生年月日から年齢を正確に計算します

質問:

nvarchar(25) として保存された生年月日を SQL Server の日付に変換し、その後、対応する年齢を年単位で計算するにはどうすればよいですか?

サンプルデータ:

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 バージョンでは、これらの複雑さを解決するための改良された技術が提供されています。

年齢を整数で計算する最良の方法:

この方法は単純かつ直接的ですが、精度は 10 進法より若干劣る可能性があります。

<code class="language-sql">SELECT
    (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeIntYears
FROM YourTable;</code>
ログイン後にコピー

年齢を小数として計算する最良の方法:

このメソッドは、DATEDIFF 関数と CASE ステートメントを使用して年齢を正確に計算し、現在の年に誕生日が過ぎているかどうかを考慮します。

<code class="language-sql">SELECT
    DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>
ログイン後にコピー

上記のコードは、DOB 列が DATE 型に変換されていることを前提としていることに注意してください。 DOB がまだ nvarchar(25) 型である場合は、クエリに型変換を追加する必要があります (例: CONVERT(DATE, DOB, 120))。 適切な変換スタイルの選択は、DOB データの特定の形式によって異なります。 たとえば、CONVERT(DATE, DOB, 120) は「yyyy-mm-dd hh:mi:ss」形式です。 データ形式に合わせてこのセクションを調整する必要がある場合があります。 最終的なクエリは次のようになります:

<code class="language-sql">SELECT
    DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(CONVERT(DATE, DOB, 120)) OR (MONTH(GETDATE()) = MONTH(CONVERT(DATE, DOB, 120)) AND DAY(GETDATE()) < DAY(CONVERT(DATE, DOB, 120))) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>
ログイン後にコピー

YourTable をテーブル名に置き換えます。 整数方式または 10 進方式の選択は、精度のニーズによって異なります。 10 進法の方がより正確ですが、整数法の方がより簡潔です。

以上がSQL Server で生年月日から年齢を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート