T-SQL格式化日期算术以更友好的格式生成

时间:2012-03-07 12:32:38

标签: sql sql-server-2005 tsql

我有一些约会......

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

任何帮助都将不胜感激。

编辑:我可能不会在最终显示中包含秒数。

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

你的问题已经写了'datepart'。

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

答案 2 :(得分:0)

使用DATEDIFF()会以您选择的格式为您提供一段时间。

例如,您可以计算两个日期之间的秒数,如下所示:

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

然后将其设置为“天,小时,分钟,秒”,您可以使用用户定义函数将其作为nvarchar

返回

这篇SO帖子可以帮助你实现这个目标:

SQL Convert Seconds into Day:Hour:Min:Sec

然后你会这样做:

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

编辑:此解决方案仅适用于相隔不到68年的日期。