转换HH:MM:SS

时间:2013-05-08 11:32:21

标签: sql sql-server sql-server-2008 time

我正在制作一个电话报告但是我遇到了麻烦。我需要计算一个代理在电话上花费的时间,源数据是HH:MM:SS的呼叫持续时间。如同在1小时12分10秒内一样几秒钟。因此,如果2个代理人接听了2个电话,那么花费的时间就会计算在那一天。

是否可以将其更改为秒?或者任何人都可以提出更好的建议吗?

3 个答案:

答案 0 :(得分:8)

时间到秒

假设它是时间数据类型,那么您可以像这样更改为秒

DATEDIFF(second, 0, @YourTimeValue)

这是一个简单的聚合示例(即总和)

DECLARE @data TABLE (TimeColumn TIME)
INSERT INTO @data values ('01:12:10'), ('02:15:45')

SELECT SUM(DATEDIFF(SECOND, 0, TimeColumn)) FROM @data

结果是12475秒

秒到时间

我想完成图片以便从秒转换回时间格式

SELECT CAST(DATEADD(SECOND, @TotalSecondsValue, 0) AS TIME)

或作为聚合示例的一部分

DECLARE @data TABLE (TimeColumn TIME)
INSERT INTO @data VALUES ('01:12:10'), ('02:15:45')

SELECT CAST(DATEADD(SECOND, SUM(DATEDIFF(SECOND, 0, TimeColumn)), 0) AS TIME) FROM @data

导致时间为03:27:55

答案 1 :(得分:4)

如果列类型为datetime,则:

(DATEPART(hh, @yourValue) * 60 * 60) + (DATEPART(mi, @yourValue) * 60) + DATEPART(s, @yourValue)

Datepart reference

答案 2 :(得分:-1)

两种方法...

这首先是简洁的,并且在不涉及小数秒的情况下可以很好地工作(相对于DATEDIFF进行舍入或舍入):

select DATEDIFF(second, 0, '00:12:10')

第二种方法提取时间的各个部分(包括小数毫秒):

select
      DATEPART(hh, '00:12:10.750')*60*60) + 
      DATEPART(mi, '00:12:10.750')*60 + 
      DATEPART(s, '00:12:10.750') + 
      DATEPART(millisecond, '00:12:10.750')/1000.0

如果您的时间精度比毫秒更精细,则可以使用纳秒分辨率:

select
      DATEPART(hh, '00:12:10.750')*60*60) + 
      DATEPART(mi, '00:12:10.750')*60 + 
      DATEPART(s, '00:12:10.750') + 
      DATEPART(nanosecond, '00:12:10.750')/1000000000.0