Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कैसे जांचें कि MySQL में दो दिनांक सीमाएं ओवरलैप हैं या नहीं?

अगर हमें गारंटी दी जाती है कि 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
    )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL मेरे टाइमस्टैम्प मानों को 0000-00-00 . में बदल रहा है

  2. Grails ऐप पर टूटा हुआ पाइप अपवाद

  3. पीडीओ mysql:कैसे पता चलेगा कि सम्मिलित सफल हुआ था

  4. SQL क्वेरी में परिणामसेट का बाइट आकार कैसे प्राप्त करें?

  5. mysqldump क्रोंटैब में काम नहीं करता है