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 サイトの他の関連記事を参照してください。