2012-03-07 54 views
1

我有一些日期...T-SQL格式化日期的友好格式的運算結果

1900-01-01 00:06:11.847 
1900-01-01 00:09:12.097 
1900-01-01 01:16:08.533 
1900-01-12 20:08:04.453 
1900-01-12 20:08:04.517 
1902-12-30 04:58:52.500 
1902-12-30 05:04:08.840 
1903-08-30 21:03:07.187 
1904-01-31 20:18:10.063 
1904-04-02 06:05:52.313 
1905-02-27 04:08:07.353 
1905-04-02 22:08:07.377 

作爲查詢的結果...

SELECT ... GetDate() - [LastRunTime] as 'Age' .... 

我想結果比如1d 3h 17m 25s

任何幫助將不勝感激。

編輯:我可能不會在最後的顯示中包括秒。

回答

0

使用DATEDIFF()會以您選擇的格式給您一段時間。

例如,你可以工作了多少秒都在2個日期像這樣之間:

SELECT DATEDIFF(s, [LastRunTime], GETDATE()) 

然後進入「天,時,分,秒」這一點,你可以使用一個用戶定義函數返回以此爲nvarchar

這SO後應該可以幫助您實現這一目標:

SQL Convert Seconds into Day:Hour:Min:Sec

然後,你會怎麼做:

SELECT dbo.DHMS(DATEDIFF(s, [LastRunTime], GETDATE())) 

編輯:該解決方案將僅適用於該日期相隔少超過68以上工作。

+0

這種方法僅適用於秒日期部分的差值小於68年的情況,否則會引發溢出錯誤。 – codingbadger 2012-03-07 12:55:24

3

這會告訴你導致XD XH XM格式:

select CAST(datediff(dd, [LastRunTime], GetDate()) AS VARCHAR(12))+'d '+ 
CAST(datediff(hh, [LastRunTime], GetDate())%24 AS VARCHAR(2))+'h '+ 
CAST(datediff(n,[LastRunTime], GetDate())%60 AS VARCHAR(2))+'m' 
+0

嗯,這不會返回所有日子,小時,分鐘嗎?例如,如果日期差異爲1天,則會返回:'1d 24小時,1440s' – Curt 2012-03-07 12:38:38

+0

沒有。我正在使用% – Vikram 2012-03-07 12:41:42

+0

啊我錯過了。我測試了你的查詢,並且它很好,但是'GETDATE()'和'LastRunTime'需要反轉,否則你會得到負值。你有'%'文件的任何鏈接嗎?我從來沒有見過它在這種情況下使用 – Curt 2012-03-07 12:45:04

1

你的問題有 '日期部分' 寫了這一切。

declare @t table(dates datetime) 
insert @t values('1900-01-01 00:06:11.847') 
insert @t values('1900-01-01 00:09:12.097') 

select cast(datepart(day, getdate() - dates) as varchar(2))+' d ' 
    + cast(datepart(hour, getdate() - dates) as varchar(2))+' h ' 
    + cast(datepart(minute, getdate()- dates) as varchar(2))+' m ' 
    + cast(datepart(second, getdate()- dates) as varchar(2))+' s' 
from @t