You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中将时长数值145351401转换为天、时、分、秒?

解决SQL中时长数值转换为天、小时、分钟、秒的问题

你之前用CAST(... AS TIME)的方法无法显示天数,是因为SQL的TIME类型仅能表示0-23小时范围内的时间,无法容纳超过24小时的时长,自然无法展示天数。以下提供两种可行的解决方案:

方案一:直接计算两个日期的差值(推荐)

既然你已经知道原始的两个日期,直接用DATEDIFF函数分别计算天、小时、分钟、秒的差值,再拼接成所需格式:

SELECT 
    CONCAT(
        DATEDIFF(day, '2022-09-08 16:21:48.400', '2022-09-16 07:22:31.400'), '天 ',
        DATEDIFF(hour, '2022-09-08 16:21:48.400', '2022-09-16 07:22:31.400') % 24, '小时 ',
        DATEDIFF(minute, '2022-09-08 16:21:48.400', '2022-09-16 07:22:31.400') % 60, '分钟 ',
        DATEDIFF(second, '2022-09-08 16:21:48.400', '2022-09-16 07:22:31.400') % 60, '秒'
    ) AS 时长;

执行结果:7天 15小时 0分钟 43秒,完全符合预期。

方案二:基于时长数值转换(如果必须使用给定的数值)

假设你的数值是总毫秒数(如果是秒数就把除数/模数的1000去掉),通过整数除法和取余运算拆分各时间单位:

DECLARE @duration BIGINT = 145351401; -- 你的时长数值
SELECT 
    CONCAT(
        FLOOR(@duration / 86400000), '天 ',
        FLOOR((@duration % 86400000) / 3600000), '小时 ',
        FLOOR((@duration % 3600000) / 60000), '分钟 ',
        FLOOR((@duration % 60000) / 1000), '秒 ',
        @duration % 1000, '毫秒'
    ) AS 时长;

如果你的数值是总秒数,调整为:

DECLARE @duration BIGINT = 145351; -- 示例总秒数
SELECT 
    CONCAT(
        FLOOR(@duration / 86400), '天 ',
        FLOOR((@duration % 86400) / 3600), '小时 ',
        FLOOR((@duration % 3600) / 60), '分钟 ',
        @duration % 60, '秒'
    ) AS 时长;

说明

  • 86400是一天的秒数(246060),86400000是一天的毫秒数
  • %是取余运算符,用于获取当前单位剩余的时长
  • FLOOR用于向下取整,确保得到整数的时间单位数

内容的提问来源于stack exchange,提问作者BigPicture

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:20:24