加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL服务器,将秒数转换为分钟,小时,天

发布时间:2020-12-12 07:45:36 所属栏目:MsSql教程 来源:网络整理
导读:我有一个包含整数值的数据库列,该值表示以秒为单位的系统运行时间.我真的很喜欢一个查询能够以一个小时(s)小时的简单易读格式向我展示时间,但我不太清楚该怎么做.我发现的很多例子似乎都使用参数作为例子,但在select函数中如何使用它并没有多少. 我需要的时间
我有一个包含整数值的数据库列,该值表示以秒为单位的系统运行时间.我真的很喜欢一个查询能够以一个小时(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

Example on SQL Fiddle

注:更改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

因此,在进行转换之前,将秒值舍入到最接近的分钟

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读