【解決方法】SQLで生年月日から年齢を計算する方法.

[ad_1]

SQLで生年月日から年齢を計算する方法.
私のテーブルにはDOBの列がありますが、SQLクエリでそれを計算する方法が必要です

解決策 2

SQL
SELECT FLOOR(DATEDIFF(DAY, @BirthDate, @TargetDate) / 365.25)

参照: SQLで生年月日に基づいて年齢を計算する[^]

また

SQL
SELECT DATEDIFF(hour,@dob,GETDATE())/8766 AS AgeYearsIntTrunc

参照:生年月日と getDate() に基づいて年齢 (年) を計算する方法[^]

参照:
SQL年齢関数[^]
生年月日で年齢を計算する[^]
日付の計算: 年齢を計算します[^]

解決策 3

やあ 、

このコードブロックを試してください

SQL
  DECLARE @date datetime, @tmpdate datetime, @years int, @months int, @days int
SELECT @date = '2/29/04'

SELECT @tmpdate = @date

SELECT @years = DATEDIFF(yy, @tmpdate, GETDATE()) - CASE WHEN (MONTH(@date) > MONTH(GETDATE())) OR (MONTH(@date) = MONTH(GETDATE()) AND DAY(@date) > DAY(GETDATE())) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)
SELECT @months = DATEDIFF(m, @tmpdate, GETDATE()) - CASE WHEN DAY(@date) > DAY(GETDATE()) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
SELECT @days = DATEDIFF(d, @tmpdate, GETDATE())

SELECT @years, @months, @days

解決策 24

ケリーの答えはほぼ正しいです。 非常に古いスレッドですが、これは誰かを助けることができます。

あなたはこれを行うことができます:

select datediff(year,[bd], getdate()) - case when month([bd]) > month(getdate()) or (month([bd]) = month(getdate()) and day([bd]) > day(getdate())) then 1 else 0 end age from [table]

table はテーブル名、bd はそのテーブルの生年月日フィールド名です。

まず、生年月日から現在までの年数を取得します。

datediff(year,[bd], getdate())

次に、その人がすでに今年の誕生日を迎えているかどうかを確認する必要があります。そうでない場合は、合計から 1 を引く必要があります。

月が未来の場合

month([bd]) > month(getdate())

または誕生日月であるが、その日が未来の場合

(month([bd]) = month(getdate()) and day([bd]) > day(getdate()))

解決策 4

これは、Medisoft Report Professional の ReportBuilder のように、RAP、Report Object Pascal の私の解決策です。

デルファイ
procedure AgeOnCalc(var Value: Variant);

var currentyear, currentmonth, currentday : integer;
    patientyear, patientmonth, patientday : integer;

begin

  decodedate(CurrentDate, currentyear, currentmonth, currentday);
  decodedate(Patient['Date of Birth'], patientyear, patientmonth, patientday);
  if (patientmonth > currentmonth) or ((patientmonth = currentmonth) and (patientday > currentday)) then
    value := currentyear - patientyear - 1
  else
    value := currentyear - patientyear;

end;

解決策 1

今日の平均年齢を計算するには、次を使用できます。 SELECT DATEDIFF(DAY, @Birth, GetDate()) / 365.25.

ただし、正確な年齢を日または年で求める場合、計算はより複雑になる可能性があります。

[ad_2]

コメント

タイトルとURLをコピーしました