2016-03-01 40 views
2

我需要從彼此減去2天,並在YYMMDD顯示它的年齡。計算減去日期,並示出它在DD/MM/YYYY格式

E.g.

2016-05-27 (Minus) 2015-01-15 = 1 Years, 5 Months, 16 Days 

這兩個日期格式爲DATETIME格式。

非常感謝!

+1

你有你自己嘗試新鮮事物? –

+1

日期沒有格式,它們是二進制的。 'DATEFORMAT'只適用於格式化/解析字符串,應該避免。您可能有任何問題,例如使用字符串而不是日期,使用不正確的字符串格式,使用錯誤的函數。請發佈代碼。在任何情況下,有沒有* *類型,可以在返回方式的時間跨度你問 –

+0

我試着使用DATEDIFF和DATEADD各種組合,但它總是會跑過來,例如91天而不是例如1天3個月。如果這是有道理的? – Noost

回答

0

你可以看看這個文檔 https://msdn.microsoft.com/en-us/library/ms189794.aspx

DATEDIFF(日期部分,開始日期,結束日期)

然後用天的

數量獲取日期然後你就可以使用DATEADD添加這個天數。

SELECT DATEADD(dd, 0, DATEDIFF(dd, startdate, enddate))

+0

嗨,想你的代碼,這就是結果:日期1:2015年8月1日00:00:00.000 \t日期2:2016年1月25日13:45:01.437 \t Days1:1900至1906年-27 00:00:00.000 \t月:1900年1月6日00:00:00.000 \t年份:1900年1月2日00:00:00.000 – Noost

+1

@Noost確保你使用'datetime2'類型,而不是datetime'的' 。 datetime的日期時間爲0001-01-01,而datetime的日期時間爲0時爲1900-01-01。在任何情況下,這都不會造成閏年。你問的是年齡計算,你不能用簡單的DATEDIFF來做到這一點 –

0

嘗試此查詢...

select (datediff(dd,convert(datetime,'5/5/2014',101),getdate())/365) years, 
((datediff(dd,convert(datetime,'5/5/2014',101),getdate()) % 365)/30) months, 
((datediff(dd,convert(datetime,'5/5/2014',101),getdate()) % 365)%30) days 

結果

years months days 
1  10  1 
+0

非常接近,calcs仍然是錯誤的,但我會用你的劇本玩一些。 – Noost

1

我想這樣的作品。

SELECT Cast(DATEDIFF(YEAR, '2015-01-15', '2016-05-27') as varchar(25)) + ' Years, ' 
    + Cast(DATEDIFF(MONTH, '2015-01-15', '2016-05-27') % 12 as varchar(25)) + ' Months, ' 
    + Cast(DATEDIFF(DAY, Dateadd(Month, DATEDIFF(MONTH, '2015-01-15', '2016-05-27') % 12 ,Dateadd(Year, DATEDIFF(YEAR, '2015-01-15', '2016-05-27'), '2015-01-15')), '2016-05-27') as varchar(25)) + ' Days' 

結果:

1 Years, 4 Months, 12 Days