數據:
下面是示例表(表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