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

SQL Server将H.M格式时间转换为总分钟数的实现方法

H.M格式时间值转总分钟数实现方案

核心逻辑适配你给出的1.2 = 1小时20分钟 = 80分钟规则,根据字段存储类型不同,有两种实现方式:

场景1:字段为数值类型存储

直接通过数值运算即可完成转换,不需要拆分函数:

SELECT 
    时间字段,
    FLOOR(时间字段) * 60 + ROUND((时间字段 - FLOOR(时间字段)) * 100, 0) AS 总分钟数
FROM 你的表名;

计算验证:1.2的计算过程为 FLOOR(1.2)*60=60,(1.2-1)*100=20,累加得80,符合预期。

场景2:字段为字符串类型存储

可以用数据库内置的拆分函数处理,无需自定义func_Split函数,各主流数据库实现如下:

MySQL

SELECT 
    时间字段,
    CAST(SUBSTRING_INDEX(时间字段, '.', 1) AS UNSIGNED) * 60 
    + CASE 
        WHEN LOCATE('.', 时间字段) = 0 THEN 0
        WHEN LENGTH(SUBSTRING_INDEX(时间字段, '.', -1)) = 1 THEN CAST(SUBSTRING_INDEX(时间字段, '.', -1) AS UNSIGNED) *10
        ELSE CAST(SUBSTRING_INDEX(时间字段, '.', -1) AS UNSIGNED)
    END AS 总分钟数
FROM 你的表名;

SQL Server

-- 适配带小数点的字段值
SELECT 
    时间字段,
    CAST(PARSENAME(时间字段, 2) AS INT) * 60 
    + CASE
        WHEN CHARINDEX('.', 时间字段) = 0 THEN 0
        WHEN LEN(PARSENAME(时间字段, 1)) = 1 THEN CAST(PARSENAME(时间字段, 1) AS INT) *10
        ELSE CAST(PARSENAME(时间字段, 1) AS INT)
    END AS 总分钟数
FROM 你的表名;

-- 额外适配无小数点的整数字段场景
SELECT 
    时间字段,
    ISNULL(CAST(PARSENAME(时间字段, 2) AS INT), CAST(时间字段 AS INT)) *60
    + CASE
        WHEN CHARINDEX('.', 时间字段) = 0 THEN 0
        WHEN LEN(PARSENAME(时间字段, 1)) = 1 THEN CAST(PARSENAME(时间字段, 1) AS INT) *10
        ELSE CAST(PARSENAME(时间字段, 1) AS INT)
    END AS 总分钟数
FROM 你的表名;

自定义函数实现(使用你已有的func_Split)

如果你坚持用已有的func_Split拆分函数,可以按如下逻辑拼接计算:

SELECT 
    时间字段,
    CAST(func_Split(时间字段, '.', 1) AS INT) *60
    + CASE
        WHEN func_Split(时间字段, '.', 2) IS NULL THEN 0
        WHEN LEN(func_Split(时间字段, '.', 2)) =1 THEN CAST(func_Split(时间字段, '.', 2) AS INT)*10
        ELSE CAST(func_Split(时间字段, '.', 2) AS INT)
    END AS 总分钟数
FROM 你的表名;

注:以上func_Split的第三个参数为返回拆分后的第N个元素,可根据你实际的函数参数规则调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:09:00