2017-07-25 9 views
0

65歳または19歳になる予定のメンバーの日付を見つける必要があります。 私はDOBと年齢があります。 SQL Serverメンバーが65歳になる日

は、彼らが 私は

はそれをやって私を助けてください、結果としてその最後の列を必要とする19または65

Id DOB  Age Date_Turning_65_or_19 
    -------------------------------------------- 
    2 1952-09-30 64  2017-09-30 

になりますときを示す日付が必要です。

私は別の数式を試していますが、動作しません。 `DATEADD(YEAR、65、dateOfBirthの)`:

私はこれだけではないだろう。この

CASE 
    WHEN MONTH(GETDATE()) <= MONTH(DateOfBirth) 
      AND DATEDIFF(YEAR, DateOfBirth, GETDATE()) = '65' 
     THEN CONVERT(DATE, CONVERT(VARCHAR(2), MONTH(DateOfBirth)) + '/' + CONVERT(VARCHAR(2), DAY(DateOfBirth)) + '/' + CONVERT(VARCHAR(4), YEAR(GETDATE()))) 
    WHEN DATEDIFF(YEAR, '19510901', GETDATE()) = '64' 
     THEN CONVERT(DATE, CONVERT(VARCHAR(2), MONTH(DateOfBirth)) + '/' + CONVERT(VARCHAR(2), DAY(DateOfBirth)) + '/' + CONVERT(VARCHAR(4), YEAR(GETDATE() + 365.25))) 
+1

のようなものを試してみましたか? – Lamak

+0

'DATEDIFF'は常に数値を返します。なぜそれを文字列と比較していますか? 'DATEDIFF(YEAR、 '19510901'、GETDATE())= '64'' - これは実際に' DATEDIFF(YEAR、' 19510901 '、GETDATE())= 64'(**は一重引用符なし!)です。 –

+0

私の実際の要件は、あなたがパラメータを渡すときです(私は65歳になる人が必要だと言います)。私は日付が –

答えて

2
select *, 
     case when dateadd(year, 19, dob) < getdate() 
      then dateadd(year, 19, dob) 
      else dateadd(year, 65, dob) 
     end 
from your_table 
+0

の人が必要です。私はなぜそれがとても複雑になったのですか? – Lamak

関連する問題