0

次の 2 つの列があります。

start_dt                  end_dt
2013-09-18 14:00:00       2013-09-18 16:00:00 

これらの 2 つの日付 (MYSQL に datetime として格納されている) の間の行を選択したいので...

SELECT *
FROM task_schedule_times
WHERE `start_dt` >= "2013-09-18 14:00:00"
AND `end_dt` <= "2013-09-18 16:00:00"

これで問題ありませんが、start_dt と end_dt 内の日付を検索する場合は、上記の行を返すことができる必要があります。

「2013-09-18 15:00:00」および「2013-09-18 15:30:00

視覚的表現 (線は時間間隔を表します):

entry1: -----------------
select:     ---------

指定された日付範囲が行の範囲内にある場合は、行を返す必要もあります

entry1: -----------------
select:     ----------------------

また

entry1:          -----------------
select: -----------------

次のような場合、結果は表示されません。

entry1:        -----------------
select: -------

願わくば、これらの創造的な情報が、私が言葉で説明できるよりもうまく説明できることを願っています。

4

3 に答える 3

3

entry start常に_<=select end

entry end常に_>=select start

SELECT *
FROM task_schedule_times
WHERE `start_dt` <= "2013-09-18 16:00:00"
AND `end_dt` >= "2013-09-18 14:00:00"
于 2013-09-18T11:50:01.157 に答える
3

重複する期間を探しているようです。2 つの期間は、一方が他方の終了前に開始し、最初の期間が 2 番目の開始後に終了する場合に重複します。

SELECT *
FROM task_schedule_times
WHERE `end_dt` >= "2013-09-18 14:00:00" AND
      `start_dt` <= "2013-09-18 16:00:00"
于 2013-09-18T11:50:41.100 に答える
2

私があなたを正しく理解していれば、あなたは次のようなものを探しています:

SELECT * 
FROM `task_schedule_times`
WHERE (`start_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00")
OR (`end_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00")
于 2013-09-18T11:58:19.953 に答える