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

如何将00d 00h 07m 42s格式的nvarchar数据转换为时间值

解决SQL中时长字符串转指定格式的问题

针对你遇到的nvarchar类型时长字符串(如00d 00h 02m 07s)转成00:00:02:07格式的需求,你之前的嵌套REPLACE因误删了天分量的内容导致转换失败,以下是两种可靠的解决方法:

方法1:精准提取各时间分量后拼接(兼容非标准位数)

这种方式能适配不同位数的数字(比如1d 5h 3m 45s这类格式),稳定性更强:

SELECT 
    -- 提取天部分并补两位零
    RIGHT('00' + SUBSTRING([ERGTalk time], 1, CHARINDEX('d', [ERGTalk time]) - 1), 2) 
    + ':' 
    -- 提取小时部分并补两位零
    + RIGHT('00' + SUBSTRING([ERGTalk time], CHARINDEX('d ', [ERGTalk time]) + 2, CHARINDEX('h', [ERGTalk time]) - CHARINDEX('d ', [ERGTalk time]) - 2), 2) 
    + ':' 
    -- 提取分钟部分并补两位零
    + RIGHT('00' + SUBSTRING([ERGTalk time], CHARINDEX('h ', [ERGTalk time]) + 2, CHARINDEX('m', [ERGTalk time]) - CHARINDEX('h ', [ERGTalk time]) - 2), 2) 
    + ':' 
    -- 提取秒部分并补两位零
    + RIGHT('00' + SUBSTRING([ERGTalk time], CHARINDEX('m ', [ERGTalk time]) + 2, CHARINDEX('s', [ERGTalk time]) - CHARINDEX('m ', [ERGTalk time]) - 2), 2) 
AS [ERGTalk Time Conversion]
FROM 你的表名;

方法2:优化版REPLACE(适配标准格式)

如果你的数据都是XXd XXh XXm XXs的标准格式,只需调整REPLACE逻辑,保留天分量即可:

SELECT 
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE([ERGTalk time], 'd ', ':'), 
                'h ', ':'
            ), 
            'm ', ':'
        ), 
        's', ''
    ) AS [ERGTalk Time Conversion]
FROM 你的表名;

该语句会直接将00d 00h 02m 07s转换为00:00:02:07。

额外提示

  • 若存在格式不规范的数据(如缺少某分量、多余空格),建议先通过CASE WHEN或正则函数做合法性校验,再执行转换。
  • 如果后续需要基于该时长做运算,建议将天、时、分、秒分别提取为数值类型存储,而非字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:29:50