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

如有任何帮助,我们将不胜感激。

编辑:我可能不会在最后的展示中包括秒。

这将以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'

你的问题上写满了"日期部分"。

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

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

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

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

然后,要将其转换为"天、小时、分钟、秒",可以使用用户定义函数将其作为nvarchar 返回

这个SO帖子应该可以帮助你实现这一点:

SQL将秒转换为天:小时:分钟:秒

然后你会做:

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

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

最新更新