2013-03-04 3 views
0

케이스 문과 함께 도움을 줄 수 있습니까? 내가 필요한 것은 다음과 같은 쿼리입니다. 이 작업을 더 쉽게 수행 할 수있는 방법이 있음을 알고 있지만 Case Statement에 대한 도움이 필요합니다.Datediff 및 DatePart를 사용하는 사례 명세서

- 현재 달이 DOB 달보다 작 으면 총 년수 중 1을 받아 41을 얻으십시오. - 현재 달이 DOB 달보다 크면 나이가 맞습니다. - 현재 달이 DOB의 달에 '같음'인 경우에도 올바른 연령을 얻으려면 요일 수준으로 가야합니다.

Set @DOB = '01 November 1971' 
Set @Today = GETDATE() 


SELECT Datediff(Year,@DOB,@Today) AS Years, 
Datepart(Month,@DOB) As DOB_Month, 
Datepart(Day, @DOB) as DOB_Day, 
DatePart(Month, @Today) As Current_Month, 
Datepart(Day,@Today) AS Current_Day 
+0

당신은'Total' 무엇을 의미합니까? –

+0

안녕하세요 Iswanto 나는 총 연도 중 1 년을 의미합니다. – wafw1971

+0

나이를 얻고 싶습니다. 맞습니까? –

답변

2

이 시도 :

DECLARE @DOB DATE= '01 November 1971' 
DECLARE @TODAY DATE = GETDATE() 

SELECT CASE 
WHEN DATEPART(MONTH, @TODAY) < DATEPART(MONTH,@DOB) THEN DATEDIFF(YEAR,@DOB,@TODAY) - 1 
WHEN DATEPART(MONTH, @TODAY) > DATEPART(MONTH,@DOB) THEN DATEDIFF(YEAR,@DOB,@TODAY) 
ELSE 
    CASE 
     WHEN DATEPART(DAY, @TODAY) < DATEPART(DAY,@DOB) THEN DATEDIFF(YEAR,@DOB,@TODAY) - 1 
     ELSE DATEDIFF(YEAR,@DOB,@TODAY) 
    END  
END 
1


이 작업을 시도 할 수 있습니다 :

case 
    when DatePart(Month, @Today) > Datepart(Month,@DOB) then Datediff(Year,@DOB,@Today) 
    when DatePart(Month, @Today) < Datepart(Month,@DOB) then (Datediff(Year,@DOB,@Today) - 1) 
    when DatePart(Month, @Today) = Datepart(Month,@DOB) then 
     case 
      when DatePart(Day, @Today) >= Datepart(Day,@DOB) then (Datediff(Year,@DOB,@Today)) 
      when DatePart(Day, @Today) < Datepart(Day,@DOB) then (Datediff(Year,@DOB,@Today) - 1) 
     end 
end as AgeCompleted, 
+0

안녕하세요. Sac 작동하지 않는 것 같아요. – wafw1971

+0

감사합니다. 당신은 위대한 일을하는 사크입니다. – wafw1971

0
declare @DOB date = '19680411' 
select datediff(year, @DOB, getdate())- case when month(@DOB)*32 + day(@DOB) > 
month(getdate()) * 32 + day(getdate()) then 1 else 0 end