我正在使用SQL Server 2008R2,我有一个名为StartTime
的表,其列名为EndTime
和StartTime
。
我需要的是找到EndTime
和(HH:MM)
之间的时间Average
之间的差异,而不是日期,以及差异之后得到的结果,我需要每月{{1}这种差异。
我的列采用DateTime
数据类型,如下所示,
---------------------------------------
STARTTIME ENDTIME
---------------------------------------
02/08/2016 14:29 02/08/2016 14:30
07/07/2016 15:37 07/07/2016 15:37
07/07/2016 15:38 07/07/2016 15:39
07/07/2016 15:39 07/07/2016 15:39
07/07/2016 15:40 07/07/2016 15:40
07/07/2016 15:44 07/07/2016 15:45
07/07/2016 15:45 07/07/2016 15:45
07/07/2016 15:46 07/07/2016 15:46
07/07/2016 15:46 07/07/2016 15:53
07/07/2016 15:53 07/07/2016 15:54
07/07/2016 15:54 07/07/2016 15:54
02/12/2016 9:28 02/12/2016 9:28
02/12/2016 9:29 02/12/2016 9:29
02/12/2016 9:30 02/12/2016 9:30
02/12/2016 9:33 02/12/2016 9:34
02/12/2016 9:34 02/12/2016 9:35
到目前为止,我已尝试过这个,
;With CTTT
AS (
Select STARTTIME
,ENDTIME
,(ENDTIME-STARTTIME) AS R
From Timings
)
Select AVG(Convert(Varchar(10),R,108))
From CTTT
我收到此错误消息,
Msg 8117,Level 16,State 1,Line 6 操作数数据类型varchar对于avg运算符无效。
我不擅长SQL,帮助会很明显。
答案 0 :(得分:1)
你不要试试这个。这将解决您的错误。
选择转换(Varchar(10),AVG(R),108) 来自CTTT
答案 1 :(得分:1)
试试这个,
select DATEPART(month,starttime) as Mon,
DATEPART(YEAR,starttime) as Years ,
avg(Convert(int,Hours)) as Hours,
AVG(Convert(int,minute)) as minutes from (select starttime,endtime,
convert(varchar(5),DateDiff(s, starttime, endtime)/3600) as Hours,convert(varchar(5),
DateDiff(s, starttime, endtime)%3600/60) as minute
from timings) as tbl
group by DATEPART(month,starttime),DATEPART(YEAR,starttime)
答案 2 :(得分:1)
这是一个将平均日期时间差异转换为hh:mm格式的工作脚本。
--DROP TABLE #Test
--DROP TABLE #TestTemp
CREATE TABLE #Test
(
[START] DATETIME NOT NULL,
[END] DATETIME NOT NULL,
);
INSERT INTO #Test
SELECT
'02/08/2016 14:29', '02/08/2016 14:34'
UNION
SELECT
'02/08/2016 14:39', '02/08/2016 14:47'
SELECT * FROM #Test
SELECT
MONTH([START]) AS 'MONTH',
YEAR([START]) AS 'YEAR',
SUBSTRING(CONVERT(VARCHAR, CAST(AVG(CONVERT(FLOAT, [END] - [START])) AS DATETIME),108),1,5) AS 'DIFFERENCE'
FROM #Test
GROUP BY
MONTH([START]),
YEAR([START])
输出:
START END
2016-02-08 14:29:00.000 2016-02-08 14:34:00.000
2016-02-08 14:39:00.000 2016-02-08 14:47:00.000
MONTH YEAR DIFFERENCE
2 2016 00:06
为方便起见:
SELECT
MONTH(STARTTIME) AS 'MONTH',
YEAR(STARTTIME) AS 'YEAR',
SUBSTRING(CONVERT(VARCHAR, CAST(AVG(CONVERT(FLOAT, ENDTIME-STARTTIME)) AS DATETIME),108),1,5) AS 'DIFFERENCE'
FROM
Timings
GROUP BY
MONTH(STARTTIME),
YEAR(STARTTIME)