数据:
下面是示例表(表A)数据SQL查询集
ID StartTime EndTime 1 2012-03-22 06:00:00.000 2012-03-22 06:30:00.000 2 2012-03-22 06:15:00.000 2012-03-22 06:45:00.000 3 2012-03-22 06:30:00.000 2012-03-22 07:00:00.000 4 2012-03-22 06:45:00.000 2012-03-22 07:15:00.000 5 2012-03-22 07:00:00.000 2012-03-22 07:30:00.000 6 2012-03-22 07:15:00.000 2012-03-22 07:45:00.000 8 2012-03-22 07:30:00.000 2012-03-22 08:00:00.000 9 2012-03-22 07:45:00.000 2012-03-22 08:15:00.000 10 2012-03-22 08:00:00.000 2012-03-22 08:30:00.000 11 2012-03-22 08:15:00.000 2012-03-22 08:45:00.000 12 2012-03-22 08:30:00.000 2012-03-22 09:00:00.000 13 2012-03-22 08:45:00.000 2012-03-22 09:15:00.000 14 2012-03-22 09:00:00.000 2012-03-22 09:30:00.000 15 2012-03-22 09:15:00.000 2012-03-22 09:45:00.000 16 2012-03-22 09:30:00.000 2012-03-22 10:00:00.000
要求:
获取一个给定的时间范围内的连续的时间集。例如时间范围:06:00至08:00
预期输出:
ID StartTime EndTime 1 2012-03-22 06:00:00.000 2012-03-22 06:30:00.000 3 2012-03-22 06:30:00.000 2012-03-22 07:00:00.000 5 2012-03-22 07:00:00.000 2012-03-22 07:30:00.000 8 2012-03-22 07:30:00.000 2012-03-22 08:00:00.000
问:
是否有可能得到使用SQL查询预期的输出?我不想使用循环。
我想出了这个,但它只过滤第一个非连续的行。
SELECT *
FROM TableA TableA_OUTER (nolock)
WHERE CONVERT(VARCHAR(5),EndTime,114) <= CONVERT(VARCHAR(5),CAST('08:00' AS DATETIME),114)
AND (CONVERT(VARCHAR(5),StartTime,114) = CONVERT(VARCHAR(5),CAST('06:00' AS DATETIME),114) OR EXISTS
(SELECT NULL from TableA TableA_INNER (nolock)
where CONVERT(VARCHAR(5),TableA_OUTER.StartTime,114) = CONVERT(VARCHAR(5),TableA_INNER.EndTime,114)
))
非常感谢您的帮助!
为什么不查询返回记录2,4和6? – GolfWolf 2012-03-19 21:37:31
感谢您关注此事。 StarTime是第一张唱片选择的关键,2开始时间是6:15。我的输入是6:00。 – user1279484 2012-03-19 22:04:35