私はUNIXを4回持っています。2つは「今日」の始まりと終わり(その日がどちらであっても)、つまり00:00:00と23:59:59であり、他の2つはユーザーが選択した時間です。
必要なのは、「今日」の時間とユーザーの時間の間の期間が重複しているかどうかを確認するための(TSQL対応の)クエリです。誰か助けてもらえますか?
私は覚えておくべき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
where UserStart <= TodayEnd and
UserEnd >= TodayStart
この投稿が古いことは知っていますが、受け入れられた回答は不完全だと思います.ほとんどの場合、少なくとももう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