0

重複の可能性:SQL Serverを使用してsysdateとbirthdateから年齢を計算
する年、月、日を使用してT-SQLで年齢を計算する方法

いくつかの年齢計算の過程で。65yrs私は SQL に関しては初心者ですが、 の時点で年をとってしまう人を選び出すという任務を負っています31 March 2013。これまでのところ、 given に基づいて年齢を計算することはできDOBますが、これらの人を特定するのに問題があります。これは単純な問題だと思いますが、困惑しています。SQLステートメントを参照してください。誰かが私を正しい方向に向けてください。

SELECT ip_master.ssn, ip_master.firstname, ip_master.surname, ip_master.status,

CASE WHEN DATEADD(YEAR, DATEDIFF (YEAR, dob, '2013/03/31'), dob) > '2013/03/31'
THEN DATEDIFF(YEAR, dob, '2013/03/31') - 1
ELSE DATEDIFF(YEAR, dob, '2013/03/31')
END AS 'Age'

FROM test_db.dbo.ip_master ip_master
4

4 に答える 4

2

ステートメントに WHERE 句を追加します。

...
WHERE dob = '1948-03-31'
于 2013-01-22T18:02:54.940 に答える
1

次のようにしますか?あなたのクエリを別のクエリに埋め込み、年齢制限を適用しました。

select * from
(
SELECT ip_master.ssn, ip_master.firstname, ip_master.surname, ip_master.status,

CASE WHEN DATEADD(YEAR, DATEDIFF (YEAR, dob, '2013/03/31'), dob) > '2013/03/31'
THEN DATEDIFF(YEAR, dob, '2013/03/31') - 1
ELSE DATEDIFF(YEAR, dob, '2013/03/31')
END AS 'Age'

FROM test_db.dbo.ip_master ip_master
)
where Age >= 65
于 2013-01-22T18:02:54.117 に答える
0

以下のクエリを試してください...完全に機能します...

   DECLARE @CalDate datetime;
   DECLARE @CurDate datetime;
   Declare @count INT   

   SET @CalDate ='03/31/2013'
   SET @count =0
   SELECT @CurDate = DateAdd(Month, 1, @CalDate)

   SET @count = @count + datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(@CurDate) as varchar)+'-'+cast(month(@CurDate) as varchar)+'-01' as datetime))))      

   SELECT ip_master.ssn, ip_master.firstname, ip_master.surname, ip_master.status,DATEDIFF (yy, DOB, cast(@CalDate as DateTime) + @count) - (        
    CASE SIGN (MONTH (DOB) - MONTH (cast(@CalDate as DateTime) + @count))        
     WHEN 1 THEN        
      1        
     WHEN -1 THEN         
      0         
     WHEN 0 THEN         
      CASE SIGN (DAY (DOB) - DAY (@CalDate + @count))        
       WHEN 1 THEN         
        1        
       WHEN 0 THEN        
        1       
       ELSE        
        0        
      END        
    END) as AGE into #temp
    FROM test_db.dbo.ip_master ip_master 

select * from #temp where  AGE >= 65
于 2013-01-22T18:20:49.017 に答える
0

あなたがしたことは何でも正しいです。選び出すには、where 句が必要です。

SELECT ip_master.ssn, ip_master.firstname, ip_master.surname, ip_master.status,

CASE WHEN DATEADD(YEAR, DATEDIFF (YEAR, dob, '2013/03/31'), dob) > '2013/03/31'
THEN DATEDIFF(YEAR, dob, '2013/03/31') - 1
ELSE DATEDIFF(YEAR, dob, '2013/03/31')
END AS 'Age'
FROM test_db.dbo.ip_master ip_master
WHERE dob = '1948-03-31'
于 2013-01-22T18:03:07.467 に答える