2016-07-27 44 views
0

私はSSMSでテーブルを作成して、それは次のフィールドがあります。SQL Server Management Studioの計算年齢

  • NAMEのVARCHAR(50)
  • BIRTHDATE日
  • AGE進(3,0)

年齢と現在の日付に基づいて年齢を計算するために、テーブルデザイナーでAGEフィールドの式を使用します。

たとえば、NAME = 'Joe Blow'、BIRTHDATE = '1/1/1970'などです。私はAGEがこれを計算し、年齢を返すことができるようにしたいと思います。

+2

の可能性のある重複した[年、月、日でT-SQLで年齢を計算する方法](http://stackoverflow.com/questions/57599/how-to:だから、あなたは、ブルートフォースを使用することができます-calculate-age-in-t-sql-years-months-months) –

答えて

0

これは少しトリッキーです。

select datediff(year, birthdate, getdate()) 

ただし、2つの日付間の年境界(Jan 1sts)の数を計算します。そしてそれは時代ではありません。

実際の年齢を取得する1つの方法は、各値から年の現在の日を差し引くことです。この正規化はうまくいくはずです:

select datediff(year, 
       dateadd(day, 1 - datepart(dy, birthdate), birthdate), 
       dateadd(day, 1 - datepart(dy, birthdate), getdate()) 
       ) 

これでさえ、うるう年で微妙なオフに1つのエラーが発生することがあります。

select (datediff(year, birthdate, getdate()) - 
     (case when datepart(month, birthdate) * 100 + datepart(day, birthdate) > 
        datepart(month, getdate()) * 100 + datepart(day, birthdate) 
       then 1 else 0 
     end) 
     ) 
+0

または、DateDiff(日、生年月日、getdate())/ 365.25を使って近い近似を使うことができます。 –

+0

@KenWhite。 。 。たぶん、しかし、人々は一般的に年齢についてかなり特定しています。 –

+0

私の年齢が誤って計算されたとき(その数日のウィンドウの間に)、私は怒られたことはありません。投票や運転ができるような重要なことに干渉してしまったのではないかと思いましたが、一般的には実行可能な解決策です。私はそれが計算された年齢がどのくらい正確に使われているかによって決まると思います。 –

関連する問題