获取列中的总小时数 SQL SERVER
Get the total sum hours in a column SQL SERVER
我有这个结果table
Id Hours
----- -----
1 09:00
2 09:30
3 10:00
4 10:30
5 11:00
6 11:30
7 12:00
8 12:30
9 13:00
10 13:30
11 14:00
12 14:30
13 15:00
14 15:30
15 16:00
16 16:30
17 17:00
18 17:30
19 18:00
我需要得到总小时数,例如从 09:00 到 18:00 总共有 :
9
小时,我需要得到这个小时总和
使用datediff
函数
select datediff(hour,min(h),max(h)) from
(
select CAST(hour AS TIME) as h from Timetable
) as t
非常不同意将时间值放在varchar中,所以最好将数据类型从varchar更改为time
你的table架构hour
是varchar
,你需要转换为时间,然后进行计算
SELECT datediff(hour,min(cast(hour as time)),max(cast(hour as time)))
FROM Timetable
注意
我建议您的 hour
列为 datetime
或 time
而不是 varchar
。因为hour
专栏意图是时间。
编辑
如果你的时间是 9:00 to 17:30
,你可以尝试使用 datediff
分钟来得到总的差异分钟数,然后除以 60 得到小时数。
SELECT datediff(minute,min(cast(hour as time)),max(cast(hour as time))) / CAST(60 as float)
FROM Timetable
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6e005cdfad4eca3ff7c4c92ef14cc9c7
declare @a time = '13:00',@b time = '17:30' --- Here you can give time, what you need.
select distinct convert(varchar(20)
, datediff(MINUTE,@a,@b) / 60)
+ ':' +
convert(varchar(20), datediff(MINUTE,@a,@b) % 60)
from #Timetable
where hour in (@a,@b)
对于您的 SQL Fiddle 示例数据。
显然,您需要使用 datediff()
。但是,您应该以分钟或秒为单位执行 datediff()
,然后转换为小时:
SELECT datediff(minute, min(cast(hour as time)), max(cast(hour as time))) / 60.0
FROM Timetable;
这将处理小时数不是准确小时数的情况。
我有这个结果table
Id Hours
----- -----
1 09:00
2 09:30
3 10:00
4 10:30
5 11:00
6 11:30
7 12:00
8 12:30
9 13:00
10 13:30
11 14:00
12 14:30
13 15:00
14 15:30
15 16:00
16 16:30
17 17:00
18 17:30
19 18:00
我需要得到总小时数,例如从 09:00 到 18:00 总共有 :
9
小时,我需要得到这个小时总和
使用datediff
函数
select datediff(hour,min(h),max(h)) from
(
select CAST(hour AS TIME) as h from Timetable
) as t
非常不同意将时间值放在varchar中,所以最好将数据类型从varchar更改为time
你的table架构hour
是varchar
,你需要转换为时间,然后进行计算
SELECT datediff(hour,min(cast(hour as time)),max(cast(hour as time)))
FROM Timetable
注意
我建议您的 hour
列为 datetime
或 time
而不是 varchar
。因为hour
专栏意图是时间。
编辑
如果你的时间是 9:00 to 17:30
,你可以尝试使用 datediff
分钟来得到总的差异分钟数,然后除以 60 得到小时数。
SELECT datediff(minute,min(cast(hour as time)),max(cast(hour as time))) / CAST(60 as float)
FROM Timetable
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6e005cdfad4eca3ff7c4c92ef14cc9c7
declare @a time = '13:00',@b time = '17:30' --- Here you can give time, what you need.
select distinct convert(varchar(20)
, datediff(MINUTE,@a,@b) / 60)
+ ':' +
convert(varchar(20), datediff(MINUTE,@a,@b) % 60)
from #Timetable
where hour in (@a,@b)
对于您的 SQL Fiddle 示例数据。
显然,您需要使用 datediff()
。但是,您应该以分钟或秒为单位执行 datediff()
,然后转换为小时:
SELECT datediff(minute, min(cast(hour as time)), max(cast(hour as time))) / 60.0
FROM Timetable;
这将处理小时数不是准确小时数的情况。