2017-03-01 7 views
1

나는 테이블 호출 한 날짜은 년 월 일 일이 필요

Opendate  Closedate  
2015-07-09  NULL  
2017-01-25  NULL  

나는 우리가 opendate 오늘의 날짜와의 차이를 계산해야

Opendate Workingperiod  
2015-07-09 1 years 8 months 20 days    
2017-01-25 0 years 1 months 3 days  

로 출력을 갖고 싶어 년 월 및 일 형식.

SELECT Opendate, 
    CAST(DATEDIFF(month,Opendate,GETDATE())/12 AS VARCHAR(5))+' year '+ 
    CAST(DATEDIFF(month,Opendate,GETDATE())%12 AS VARCHAR(5)) +' month '+ 
    CAST(DATEDIFF(day,DATEADD(month,DATEDIFF(month,Opendate,GETDATE()),Opendate),GETDATE()) AS VARCHAR(5))+' days ' AS Workingperiod 
FROM Dates 

출력 시도 : - 나는 부정적 일 얻고있다

Opendate Workingperiod  
2015-07-09 1 year 8 month -8 days  
2017-01-25 0 year 2 month -24 days  

는, 누군가가 거기에 어떤 문제가 있는지 알 수 있습니다.

+0

당신은 30 일 개월을 가정 또는 실제 있습니까 ? –

+0

실제 날짜 비록 내가 추측하고 있지만 30 개라도 관리 할 수 ​​있다고하더라도 –

답변

0
DECLARE @opendate datetime, @date datetime, @years int, @months int, @days int 
SELECT @opendate = '2015-07-09' 
SELECT @date = @opendate 
SELECT @years = DATEDIFF(YYYY, @date, GETDATE()) - CASE WHEN (MONTH(@opendate) > MONTH(GETDATE())) 
OR (MONTH(@opendate) = MONTH(GETDATE()) AND DAY(@opendate) > DAY(GETDATE())) 
THEN 1 ELSE 0 END 
SELECT @date = DATEADD(YYYY, @years, @date) 
SELECT @months = DATEDIFF(MONTH, @date, GETDATE()) - CASE WHEN DAY(@opendate) > DAY(GETDATE()) 
THEN 1 ELSE 0 END 
SELECT @date = DATEADD(MONTH, @months, @date) 
SELECT @days = DATEDIFF(DAY, @date, GETDATE()) 
SELECT @years AS 'YEARS', @months AS 'MONTHS', @days AS 'DAYS' 

첫 번째 항목 (2015년 7월 9일)

FIRST

두 번째 항목 (2017년 1월 25일)

SECOND