अगर हमें गारंटी दी जाती है कि date_started
, datefinished
, $DateA
और $DateB
NULL नहीं हैं, और हमें गारंटी है कि date_started
date_finished
. से बड़ा नहीं है ...
`s` represents `date_started`
`f` represents `date_finished`
`a` represents the smaller of `$DateA` and `$DateB`
`b` represents the larger of `$DateA` and `$DateB`
नेत्रहीन:
s-----f overlap
-----+-----+----- -------
a-b | | NO
a---b | YES
a-----b | YES
a---------b YES
a-----------b YES
a---b | YES
a-----b YES
a-------b YES
| a-b | YES
| a---b YES
| a-----b YES
| a-b YES
| | a-b NO
जब श्रेणियों का कोई "ओवरलैप" न हो तो हम आसानी से पता लगा सकते हैं:
( a > f OR b < s )
और जब है . हो तो हम इसे "सत्य" लौटाने के लिए आसानी से नकार सकते हैं एक "ओवरलैप":
NOT ( a > f OR b < s )
इसे SQL में कनवर्ट करना:
NOT ( GREATEST('{$dateA}','{$dateB}') < p.date_started
OR LEAST('{$dateA}','{$dateB}') > p.date_finished
)