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

SQL Server中整数格式时间(5/6位)转换为time类型的技术问题

解决整数格式时间转SQL Time类型的兼容问题

这个问题我之前处理类似需求时也碰到过!核心问题在于当输入是5位整数时,直接用STUFF操作会因为位数不足导致插入冒号的位置偏移,解决思路其实很简单——先把所有数字统一补成6位的字符串,再进行格式转换就搞定了。

问题原因分析

你原来的语句针对6位整数(HHMMSS格式)是有效的,但5位整数属于HMMSS格式(比如83714实际是08:37:14),直接对整数做STUFF操作时,字符串长度只有5位,在第3位插入冒号会导致格式错乱。

解决方案:统一补前导0再处理

我们可以先把整数转换为字符串,通过补前导0的方式将所有输入统一为6位的HHMMSS格式字符串,再用你熟悉的STUFF逻辑插入冒号,最后转换为time类型。

完整的测试代码如下:

-- 测试5位整数的场景(预期输出:08:37:14)
DECLARE @upd_time1 INT = 83714
SELECT 
    CAST(
        STUFF(
            STUFF(
                RIGHT('000000' + CAST(@upd_time1 AS VARCHAR(6)), 6),
                5, 0, ':'
            ),
            3, 0, ':'
        ) AS TIME
    ) AS converted_time

-- 测试6位整数的场景(预期输出:16:50:22)
DECLARE @upd_time2 INT = 165022
SELECT 
    CAST(
        STUFF(
            STUFF(
                RIGHT('000000' + CAST(@upd_time2 AS VARCHAR(6)), 6),
                5, 0, ':'
            ),
            3, 0, ':'
        ) AS TIME
    ) AS converted_time

代码逻辑说明

  1. 补前导0:RIGHT('000000' + CAST(@upd_time AS VARCHAR(6)), 6) 会把整数转换为字符串后,在左侧补0,最终截取最后6位。比如83714会变成083714,165022保持165022,统一为6位格式。
  2. 插入冒号:对统一后的6位字符串,在第3位和第5位插入冒号,得到HH:MM:SS格式的字符串。
  3. 转换为Time类型:将格式化后的字符串转换为SQL的time类型。

这个方法同时兼容5位和6位的整数输入,逻辑清晰且容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:03