【问题标题】:Need days in year month and days年月日需要天数
【发布时间】:2017-03-01 06:13:22
【问题描述】:

我有一个名为 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     

我的日子都不好过,谁能告诉我哪里出了问题。

【问题讨论】:

  • 您是假设每月 30 天还是实际?
  • 我假设的实际天数,但即使是 30 天我仍然可以管理

标签: sql ssrs-2008-r2


【解决方案1】:
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)

第二次参赛(2017-01-25)

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2013-10-14
    • 2019-08-03
    • 1970-01-01
    • 2016-11-11
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多