一个关于时间的sql语句
2014-05-20 17:14
288 查看
在别的论坛看到这么一个关于计算时间的sqlserver的题...
我有一些时间段,怎么能计算出去重复的总时间,比如
a b
9:00:00 10:00:00
8:00:00 9:30:00
11:00:00 12:00:00
结果应该是3小时,如果把时间段查出来在外面计算太慢了,能不能直接在SQL里面算好
--代码如下
with tb(a,b)as(
select '2001-01-01 6:00:00','2001-01-01 7:00:00' union
select '2001-01-01 9:00:00','2001-01-01 10:00:00' union
select '2001-01-01 8:00:00','2001-01-01 9:30:00' union
select '2001-01-01 8:00:00','2001-01-01 10:30:00' union
select '2001-01-01 11:00:00','2001-01-01 12:00:00'),tc as(
select CONVERT(datetime,a)a,CONVERT(datetime,b)b,ROW_NUMBER() over(order by convert(datetime,a),convert(datetime,b))num from tb
),td as(
select * from tc where num=1
union all
select case when tc.a between td.a and td.b then td.a else tc.a end
,case when tc.a between td.a and td.b then case when tc.b>td.b then tc.b else td.b end else tc.b end,tc.num
from td,tc where td.num=tc.num-1)
select a,max(b)b from td
group by a
我有一些时间段,怎么能计算出去重复的总时间,比如
a b
9:00:00 10:00:00
8:00:00 9:30:00
11:00:00 12:00:00
结果应该是3小时,如果把时间段查出来在外面计算太慢了,能不能直接在SQL里面算好
--代码如下
with tb(a,b)as(
select '2001-01-01 6:00:00','2001-01-01 7:00:00' union
select '2001-01-01 9:00:00','2001-01-01 10:00:00' union
select '2001-01-01 8:00:00','2001-01-01 9:30:00' union
select '2001-01-01 8:00:00','2001-01-01 10:30:00' union
select '2001-01-01 11:00:00','2001-01-01 12:00:00'),tc as(
select CONVERT(datetime,a)a,CONVERT(datetime,b)b,ROW_NUMBER() over(order by convert(datetime,a),convert(datetime,b))num from tb
),td as(
select * from tc where num=1
union all
select case when tc.a between td.a and td.b then td.a else tc.a end
,case when tc.a between td.a and td.b then case when tc.b>td.b then tc.b else td.b end else tc.b end,tc.num
from td,tc where td.num=tc.num-1)
select a,max(b)b from td
group by a
相关文章推荐
- 一个批量更新的sql语句引发的关于创业者心态的思考
- 关于ADO.NET,只须一个连接,一条SQL语句,轻松实现增删改查
- 在数据库中查看一个sql语句的执行时间和SP2-0027错误
- mysql关于时间日期的sql语句
- 关于SQL语句的一个小技巧
- 关于sql查询语句 的一个问题
- MYSQL关于时间日期的sql语句
- 关于一个sql执行时间而引发的讨论
- 一个关于JOIN的SQL语句
- 关于enum ,调用webservice,用户控件与主页面之间的交互,datsource属性,net面试题,反射类生成sql语句,URl重写一个小实例
- 关于统计的一个sql问题,使用动态sql语句实现。
- 一个关于SQL语句的练习题目
- 在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
- 一个关于累加工资的T-SQL语句
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 关于一个字符串的SQL语句
- 关于ADO+SQL /Access里面查询日期时间类型语句的一点总结
- 在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
- 一个关于Oracle更新语句引发的时间字段类型的问题
- 学习关于时间在sql里面的对比,用if语句(这个有点特别)