簡體   English   中英

需要以年,月和日格式計算加入日期和今天日期之間的天數差

[英]Need to calculate difference of days between joining date and today's date in year,month and days format

我有一個叫日期的表

Opendate        Closedate       
2016-02-26      NULL    
2017-01-01      NULL    
2015-11-11      NULL    

我想要輸出為

Opendate    Workingperiod       
2016-02-26  1 years 0 months 1 days         
2017-01-01  0 years 1 months 26 days     
2015-11-27  1 years 3 months 0 days     

我們需要計算opendate和今天的日期之間的差異,以及年月日格式。

any1可以共享任何輸入嗎?

我認為這應該有效-結合日期算術(我要添加CURRENT_DATE來顯示我們正在計算的內容); WITH子句只是您顯示的輸入。

WITH
input(Opendate,Closedate) AS (
          SELECT DATE '2016-02-26',NULL
UNION ALL SELECT DATE '2017-01-01',NULL
UNION ALL SELECT DATE '2015-11-11',NULL
)
SELECT 
  GETDATE( ) AS current_date
, Opendate
, CAST(DATEDIFF(MONTH, Opendate,GETDATE( )) / 12 AS VARCHAR(3)) + ' years '
+ CAST(DATEDIFF(MONTH, Opendate,GETDATE( )) % 12 AS VARCHAR(3)) + ' months '
+ CAST(
    DATEDIFF(
      DAY
    , Opendate
    , DATEADD(
        MONTH
      , DATEDIFF(MONTH, Opendate,GETDATE( )) * -1
      , GETDATE( )
      )
    ) 
  AS VARCHAR(3)
  ) + ' days'
AS WorkingPeriod
FROM input;

current_date|Opendate  |WorkingPeriod
2017-02-26  |2016-02-26|1 years 0 months 0 days
2017-02-26  |2017-01-01|0 years 1 months 25 days
2017-02-26  |2015-11-11|1 years 3 months 15 days
CREATE TABLE Dates(Opendate DATE, CloseDate DATE)

INSERT INTO Dates(Opendate, CloseDate) values('2016-02-26', null),('2017-01-01',null),('2015-11-11',null)

SELECT Opendate,
       CASE WHEN DAY(Opendate)>DAY(GETDATE()) THEN 
         CAST(DATEDIFF(month,Opendate,GETDATE())/12 AS VARCHAR(5))+' year '+
         CAST((DATEDIFF(month,Opendate,GETDATE())%12-1) AS VARCHAR(5)) +' month '+
         CAST(DATEDIFF(day,DATEADD(month,DATEDIFF(month,Opendate,GETDATE())-1,Opendate),EOMONTH(DATEADD(month,-1,GETDATE())))+DAY(GETDATE()) AS VARCHAR(5))+' days ' 
         ELSE
           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 '
       END AS 'Workingperiod'     
  FROM Dates

上面是我的腳本,希望您覺得它有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM