2

私はUNIXを4回持っています。2つは「今日」の始まりと終わり(その日がどちらであっても)、つまり00:00:00と23:59:59であり、他の2つはユーザーが選択した時間です。

必要なのは、「今日」の時間とユーザーの時間の間の期間が重複しているかどうかを確認するための(TSQL対応の)クエリです。誰か助けてもらえますか?

4

3 に答える 3

5

私は覚えておくべきtxtドキュメントにこれを持っています(日付失読症):

交差:

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>------------------------<|

where Range1Start <= Range2End and Range1End >= Range2Start

範囲 2 の範囲 1:

Date Range 1   |                   |>-------------<|
Date Range 2   |                 |>------------------------<|


where Range1Start >= Range2Start and Range1End <= Range2End

範囲 1 の範囲 2:

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>-------------<|


where Range2Start >= Range1Start and Range2End <= Range1End
于 2012-07-23T10:05:34.547 に答える
3
where UserStart <= TodayEnd and
      UserEnd >= TodayStart
于 2012-07-23T09:38:10.347 に答える
0

この投稿が古いことは知っていますが、受け入れられた回答は不完全だと思います.ほとんどの場合、少なくとももう1つの交差するケースがあり、上記を変更します.

交差 (固定)

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>------------------------<|
WHERE Range1Start <= Range2Start AND Range1End <= Range2End AND Range1End>=Range2Start

このように修正すると、Range 1 の Range 2 が Intersection として検出されるのを回避できます (これは、受け入れられたソリューションのクエリ結果です)。

次の 2 つは問題ありませんが、うまく説明されていません

範囲 2 の範囲 1

Date Range 1   |                      |>-------------<|
Date Range 2   |                 |>------------------------<|

Date Range 1   |                 |>------------------------<|
Date Range 2   |                 |>------------------------<|

WHERE Range1Start >= Range2Start AND Range1End <= Range2End 

範囲 1 の範囲 2:

Date Range 1   |         |>------------------------<|
Date Range 2   |               |>-------------<|

Date Range 1   |         |>------------------------<|
Date Range 2   |         |>------------------------<|


WHERE Range2Start >= Range1Start AND Range2End <= Range1End

そして最後に2つ目の交差点

交差 (右)

Date Range 1   |                |>----------------------<|
Date Range 2   |       |>------------------------<|
WHERE Range2Start <= Range1Start AND Range2End <= Range1End AND Range1Start <=Range2End

必要なものによっては、より大きい (>=) とより小さい (<=) を使用しないことをお勧めします

等しい範囲

Date Range 1   |         |>------------------------<|
Date Range 2   |         |>------------------------<|


WHERE Range1Start = Range2Start AND Range1End = Range2End
于 2016-05-07T16:48:01.817 に答える