首页 > 解决方案 > 将 HH:MM:SS 的 varchar 转换为分钟值

问题描述

使用 SQL Server,我有一列varchar数据来自另一个源,格式为伪 HH:MM:SS 字符串,表示持续时间,例如:

Duration
HH:MM:SS
00:43:46
01:30:06
43:56:38
89:24:00
5890:01:00

我想将它转换int为每个简单的分钟 () 值

Duration    MinuteDuration
HH:MM:SS    mm
00:43:46    43
01:30:06    90
43:56:38    2636
89:24:00    5364
5890:01:00  353401

我环顾了一下stackoverflow,发现有几个人建议使用时间参数进行转换

    USE [MyDB]
    GO

    SELECT [User],
          [Duration],
          (SELECT CONVERT(TIME, Duration, 8)) as DurationMinutes,
      FROM [dbo].[MyTable]

    GO

但我不能使用它,因为我的小时值可能大于 24/12(我的小时值可能是数千)。由于原始数据在 a 中varchar,我需要先解释字符串,然后将小时乘以 60* 并将其添加到分钟值(并且只需删除秒值)。

标签: sqlsql-servertsqltime

解决方案


虽然解析时间组件绝对是可能的,但字符串操作也非常简单:

select duration,
       (convert(int, left(duration, charindex(':', duration) - 1)) * 60 +
        convert(int, left(right(duration, 5), 2))
       )
from t;

是一个 db<>fiddle。


推荐阅读