Tsql 将HH:MM:SS字符串转换为分钟数

Tsql 将HH:MM:SS字符串转换为分钟数,tsql,Tsql,我有以下问题 select cast(dateadd(minute, datediff(minute, TimeIn, TimeOut), 0) as time(0) ) 我以小时分秒的格式从两列中获取结果。 我只想要min的格式。因此02:47:00将读取167尝试以下操作: datediff(minute, 0, '02:47') 对于SQL Server(也适用于2005年): SQL Server查询: SELECT cast(substring('02:47:00',1,2) AS

我有以下问题

select cast(dateadd(minute, datediff(minute, TimeIn, TimeOut), 0) as time(0) )
我以小时分秒的格式从两列中获取结果。 我只想要min的格式。因此
02:47:00
将读取
167

尝试以下操作:

datediff(minute, 0, '02:47')
对于SQL Server(也适用于2005年):

SQL Server查询:

SELECT cast(substring('02:47:00',1,2) AS int)*60+
       cast(substring('02:47:00',4,2) AS int)+ 
       cast(substring('02:47:00',7,2) AS int)/60.0 AS minutes
MYSQL查询:

SELECT TIME_TO_SEC('02:47:00') / 60
结果:

| MINUTES |
-----------
|     167 |
seconds     minutes
----------- ---------------------------------------
370025      6167.083333
给你:

| DIFFERENCE |
--------------
|        167 |
$time='02:47:00';
$time=explode(“:”,$time);
$total=($a[0]*60)+$a[1];
回显“分钟:”。$total
回声“秒:”.$a[2];
扩展贾斯汀的答案。这允许小时数大于2位数的情况

declare @time varchar(50) = '102:47:05'

SELECT cast(right(@time,2) AS int)+
       cast(left(right(@time,5),2) AS int)*60+ 
       cast(left(@time,len(@time)-6) AS int)*3600 AS seconds,
       (cast(right(@time,2) AS int)+
       cast(left(right(@time,5),2) AS int)*60+ 
       cast(left(@time,len(@time)-6) AS int)*3600)/60.0 AS minutes
结果:

| MINUTES |
-----------
|     167 |
seconds     minutes
----------- ---------------------------------------
370025      6167.083333

不幸的是,如果要对超过24小时的值使用DATEPART函数,您将收到一个错误:

从字符串转换日期和/或时间时,转换失败。“

您可以使用以下代码对其进行测试:

declare @Time DATETIME = '32:00:00'
select ((DATEPART(HOUR, @Time)*60) + (DATEPART(MINUTE, @Time)))
为了解决这个问题,我采用了另一种方法:

declare @tbl table(WorkHrs VARCHAR(8))
insert into @tbl(WorkHrs) values ('02:47:00')
insert into @tbl(WorkHrs) values ('32:00:00')
-- Sum in minutes
SELECT TRY_CAST(([HOURS] * 60) + [MINUTES] + ([SECOND] / 60) AS INT) as TotalInMinutes
FROM (
SELECT 
    -- Use this aproach to get separated values 
    SUBSTRING(WorkHrs,1,CHARINDEX(':',WorkHrs)-1) AS [HOURS],
    SUBSTRING(WorkHrs,4,CHARINDEX(':',WorkHrs)-1) AS [MINUTES],
    SUBSTRING(WorkHrs,7,CHARINDEX(':',WorkHrs)-1) AS [SECOND] -- probably you can ignore this one
    FROM @tbl
)
tbl
-- Sum in seconds
    SELECT TRY_CAST(([HOURS] * 3600) + ([MINUTES] * 60) + [SECOND] AS INT) as TotalInSeconds
    FROM (
    SELECT 
    -- Use this aproach to get separated values 
    SUBSTRING(WorkHrs,1,CHARINDEX(':',WorkHrs)-1) AS [HOURS],
    SUBSTRING(WorkHrs,4,CHARINDEX(':',WorkHrs)-1) AS [MINUTES],
    SUBSTRING(WorkHrs,7,CHARINDEX(':',WorkHrs)-1) AS [SECOND]
    FROM @tbl
)
tbl
此代码将按如下方式返回:


什么是db、mysql、sql server?嘿,请你仔细检查一下你的问题,并奖励那些回答最好的人。我不认为这是tsql。考虑到唯一的标签是tsql,示例查询是tsql,这完全是离题的。这正是我在我的通话持续时间字段中所需要的。谢谢!
declare @Time DATETIME = '32:00:00'
select ((DATEPART(HOUR, @Time)*60) + (DATEPART(MINUTE, @Time)))
declare @tbl table(WorkHrs VARCHAR(8))
insert into @tbl(WorkHrs) values ('02:47:00')
insert into @tbl(WorkHrs) values ('32:00:00')
-- Sum in minutes
SELECT TRY_CAST(([HOURS] * 60) + [MINUTES] + ([SECOND] / 60) AS INT) as TotalInMinutes
FROM (
SELECT 
    -- Use this aproach to get separated values 
    SUBSTRING(WorkHrs,1,CHARINDEX(':',WorkHrs)-1) AS [HOURS],
    SUBSTRING(WorkHrs,4,CHARINDEX(':',WorkHrs)-1) AS [MINUTES],
    SUBSTRING(WorkHrs,7,CHARINDEX(':',WorkHrs)-1) AS [SECOND] -- probably you can ignore this one
    FROM @tbl
)
tbl
-- Sum in seconds
    SELECT TRY_CAST(([HOURS] * 3600) + ([MINUTES] * 60) + [SECOND] AS INT) as TotalInSeconds
    FROM (
    SELECT 
    -- Use this aproach to get separated values 
    SUBSTRING(WorkHrs,1,CHARINDEX(':',WorkHrs)-1) AS [HOURS],
    SUBSTRING(WorkHrs,4,CHARINDEX(':',WorkHrs)-1) AS [MINUTES],
    SUBSTRING(WorkHrs,7,CHARINDEX(':',WorkHrs)-1) AS [SECOND]
    FROM @tbl
)
tbl