需要几个月和几天的天数

时间:2017-03-01 06:13:23

标签: sql ssrs-2008-r2

我有一个名为Dates的表

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

我希望输出为

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

我们需要计算opendate和今天的日期以及年月和日格式之间的差异。

试过了

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     

我正处于负面状态,有人可以告诉它有什么问题。

1 个答案:

答案 0 :(得分: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-07-09)

FIRST

第二次入境(2017-01-25)

SECOND