Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server的总分钟数_Sql_Sql Server_Time_Sum - Fatal编程技术网

SQL server的总分钟数

SQL server的总分钟数,sql,sql-server,time,sum,Sql,Sql Server,Time,Sum,大家好, 我的小问题是这样的: 我有以下几列:电话号码,时间(时间域),意思是呼叫电话号码和呼叫持续时间。我需要将电话号码分组并计算分钟数。菲尔兹看起来像这样: nr time 726028xxx 00:07:07 735560css 00:07:37 726028xxx 00:07:55 据我所知,这应该适用于SQL ServerDATETIME和2008TIME数据类型 例如: DECLARE @tbl TABLE ( phone_nr varchar(

大家好, 我的小问题是这样的: 我有以下几列:电话号码,时间(时间域),意思是呼叫电话号码和呼叫持续时间。我需要将电话号码分组并计算分钟数。菲尔兹看起来像这样:

 nr          time 
726028xxx 00:07:07 
735560css 00:07:37 
726028xxx 00:07:55 
据我所知,这应该适用于SQL Server
DATETIME
和2008
TIME
数据类型

例如:

DECLARE @tbl TABLE
(
    phone_nr varchar(10),
    call_time TIME
);

INSERT INTO @tbl VALUES ('726028xxx', '00:07:07');
INSERT INTO @tbl VALUES ('735560css', '00:07:37');
INSERT INTO @tbl VALUES ('726028xxx', '00:07:55');

SELECT phone_nr, SUM(DATEPART(minute, call_time)) AS total_call_time FROM @tbl GROUP BY phone_nr;
结果:

phone_nr  | minutes
726028xxx | 14
735560css | 7
编辑

此版本与上述版本相同,只是它还考虑了秒和小时(例如1小时7分钟7秒=67.117分钟),因此更准确

SELECT 
    phone_nr, 
    SUM(CAST(DATEPART(second, call_time) + (DATEPART(minute, call_time) * 60) + (DATEPART(hour, call_time) * 3600) AS decimal) / 60) AS total_call_time
FROM 
    @tbl
GROUP BY
    phone_nr;
如果第一条记录是
01:07:07
,则结果如下

phone_nr  | minutes
726028xxx | 75.033332
735560css | 7.616666

您可以使用DATEDIFF获取自时间“零”以来经过的总分钟数


如果通话持续时间超过一小时,这会继续工作吗?@Robin-需要编辑才能包含小时部分-我刚刚将其编辑到我的答案中@罗宾,我刚刚再次编辑了我的答案,所以它也可以工作几个小时。如果你的问题解决了,你应该将答案标记为已接受。
phone_nr  | minutes
726028xxx | 75.033332
735560css | 7.616666
SELECT
 [PHONE_NR],
 SUM(DATEDIFF(minute, '00:00:00', [TIME]))
FROM
 [YourTable]
GROUP BY
 [PHONE_NR]
declare @v1 varchar(50)
declare @v2 varchar(50)
set @v1='03:10'
set @v2='01:50'

--select cast(left(v1,2) as int) + cast(left(v2,2)as int)

select 
cast(
cast(left(@v1,2) as int) + cast(left(@v2,2)as int)
+(cast(right(@v1,2) as int) + cast(right(@v2,2) as int))/60 as varchar)

+':'+cast(( cast(right(@v1,2) as int) + cast(right(@v2,2) as int))%60 as varchar)