1

これが尋ねられたことは知っていますが、正しく機能しているように見える次のコードを見つけたので、ここにいるすべてのプロに簡単に見てもらいたいと思いました.

私は銀行で働いており、常に 100% 機能する必要がありますが、多くのクエリが正しくない場合があることに気付きました。またN.NameBirthdate、データベースから取得している列です。

前もって感謝します。

SELECT 
   CASE 
      WHEN (MONTH(GETDATE()) * 100) + DAY(GETDATE()) >= (MONTH(N.NameBirthdate) * 100) +  DAY(N.NameBirthdate) 
      THEN DATEDIFF(Year, N.NameBirthdate, GETDATE()) 
      ELSE DATEDIFF(Year, N.NameBirthdate, GETDATE())-1 
   END AS 'Age',
4

4 に答える 4

2

それが 100% うまくいくかどうかは正確にはわかりませんが、他のクエリのアイデアを受け入れますか? 私はいつもこれを使用します:

SELECT FLOOR(DATEDIFF(d, N.NameBirthDate, GETDATE()) / 365.25) AS Age

年齢を計算する必要がある場合。365.25 は、うるう年を許可するためのものです。

ただし、ユーザーがうるう年を経験したことがなく、クエリが実行される時刻によっては、わずかな不正確さが生じる可能性があります。詳細については、これを参照してください

于 2013-01-30T16:55:59.503 に答える
0

これが古いことは知っていますが、誰かの年齢を正しく計算する簡単な方法を探していましたが、何も見つかりませんでした. これらの回答は問題なく機能しますが、ケースステートメントは必要なく、完全に正確にしたかったので、これを開発しました:

SELECT DATEPART(YY,GETDATE()-COALESCE(DOB,GETDATE()))-DATEPART(YY,0)

元。

DATEPART(YY,GETDATE()-COALESCE(DOB,GETDATE()))

DATEPART(YY,'07-30-2014' - '10-03-2000') = 1913...

1913 - DATEPART(YY,0)...

1913 - 1900 = 13

DOB が null の場合は 0 になり、日付システムが何であれ、減算DATEPART(YY,0)するとそれが考慮されるため、この方法の方が気に入っています。したがって、1913 の代わりに、1917 - 1904 = 13 となり、何らかの形で日付システムが 1904 の場合 (Excel にこれがあることはわかっています。DB は? IDK; IDC) また、61 文字しかありません。DB が空のセットを許可する場合は、次NULLIFのように使用できます。

SELECT DATEPART(YY,GETDATE()-COALESCE(NULLIF(DOB,''),GETDATE()))-DATEPART(YY,0)
于 2014-07-30T16:59:50.583 に答える
0

あなたが持っているものはうまくいくはずです。もう少し読みやすく/明白だと思うという理由だけで、バリエーションを使用する場合があります。

SELECT DATEDIFF(Year, N.NameBirthdate,getdate()) - 
    (case when month(N.NameBirthdate) > month(getdate()) or (month(N.NameBirthdate) = month(getdate()) and day(N.NameBirthdate) > day(getdate()) ) then 1 else 0 end)

私にとって、これは理にかなっています。なぜなら、それがあなた (または私) が誰かの年齢を判断する方法だからです。OK: あなたは何年生まれで、今は何年ですか? 私たちは今何月ですか?誕生月ですか?今日は何曜日ですか?

個人的には閏年方式は好きではありません。まず、365.25 ではなく .24 です。正確には 365.24219647 です。.25 を使用する場合は、間違っています。例: http://www.sqlfiddle.com/#!3/d41d8/8267

于 2013-01-30T17:19:45.273 に答える