データを設定します:
ここにあるサンプルテーブル(テーブル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 8時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
ありがとうございます。 StarTimeは最初のレコード選択のキーです.2つの開始時間は6:15です。私の入力は6:00です。 – user1279484