我有一个数据库列,其中包含一个整数值,该整数值表示系统的运行时间(以秒为单位)。我真的希望查询能够以一种易于阅读的格式(天,小时,分钟)向我显示正常运行时间,但是我不太确定该怎么做。我发现很多示例似乎都使用参数作为示例,但在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, 0, dateadd(second, tblAssets.Uptime, 0))) as varchar(4))
+ ' Day(s) ' + convert(varchar(2), dateadd(second, tblAssets.Uptime, 0), 108) +' Hour(s)'
else
convert(varchar(5), dateadd(second, tblAssets.Uptime, 0), 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的convert将秒转换为日期后,将日期转换为HH:mm:ss格式的varchar。
例如
SELECT Formatted = CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' +
CONVERT(VARCHAR(5), DATEADD(SECOND, Seconds, '19000101'), 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), DATEADD(SECOND, ROUND(Seconds / 60.0, 0) * 60, '19000101'), 8),
Seconds
FROM ( SELECT Seconds = 3899
) S
我刚刚将对列的每个引用替换为seconds
:
ROUND(Seconds / 60.0, 0) * 60
因此,在进行转换之前,将秒值舍入到最接近的分钟
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句