我有一个包含整数值的数据库列,该值表示以秒为单位的系统运行时间.我真的很喜欢一个查询能够以一个小时(s)小时的简单易读格式向我展示时间,但我不太清楚该怎么做.我发现的很多例子似乎都使用参数作为例子,但在select函数中如何使用它并没有多少.
我需要的时间与网站上显示的内容相同.我之前尝试了一个查询,并添加了几天并删除了分钟.谁能帮我吗?
来源数据:
PDT0014 6141 PDT0008 4990 PDT0024 840227 PDT0033 2301 PDT0035 5439 PDT0005 3434 PDT0019 5482
示例代码:
SELECT tblAssets.AssetName,(case when tblAssets.Uptime> (24*60*60) then cast(datepart(day,datediff(dd,dateadd(second,tblAssets.Uptime,0))) as varchar(4)) + ' Day(s) ' + convert(varchar(2),0),108) +' Hour(s)' else convert(varchar(5),108) + ' Hour(s) Minute(s) ' end) AS Uptime FROM tblAssets
PDT0014 01:42 Hour(s) Minute(s) PDT0008 01:23 Hour(s) Minute(s) PDT0024 10 Day(s) 17 Hour(s) PDT0033 00:38 Hour(s) Minute(s) PDT0035 01:30 Hour(s) Minute(s) PDT0005 00:57 Hour(s) Minute(s) PDT0019 01:31 Hour(s) Minute(s)
解决方法
我倾向于使用:
CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' + CONVERT(VARCHAR(5),DATEADD(SECOND,Seconds,'19000101'),8)
顶部部分只是以整数形式获取您的日期,底部使用sql-Server的转换将日期转换为varchar,格式为HH:mm:ss,将秒转换为日期.
例如
SELECT Formatted = CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' + CONVERT(VARCHAR(5),8),Seconds FROM ( SELECT TOP 10 Seconds = (ROW_NUMBER() OVER (ORDER BY Object_ID) * 40000) FROM sys.all_Objects ORDER BY Object_ID ) S
注:更改CONVERT(VARCHAR(5),DATEADD(..到CONVERT(VARCHAR(8),DATEADD(..以保持结果中的秒数)
编辑
如果你不想要秒并且需要舍入到最接近的分钟而不是截断你可以使用:
SELECT Formatted = CAST(FLOOR(ROUND(Seconds / 60.0,0) * 60 / 86400) AS VARCHAR(10))+'d ' + CONVERT(VARCHAR(5),ROUND(Seconds / 60.0,0) * 60,Seconds FROM ( SELECT Seconds = 3899 ) S
我刚刚将每个引用替换为列秒:
ROUND(Seconds / 60.0,0) * 60
因此,在进行转换之前,将秒值舍入到最接近的分钟