Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kiểm tra xem hai phạm vi ngày có trùng nhau trong mysql hay không?

Nếu chúng tôi được đảm bảo rằng date_started , datefinished , $DateA$DateB không phải là NULL và chúng tôi đảm bảo rằng date_started không lớn hơn 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`

Trực quan:

      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

Chúng tôi có thể dễ dàng phát hiện khi không có "chồng chéo" của các phạm vi:

( a > f OR b < s )

Và chúng ta có thể dễ dàng phủ định điều đó để trả về "true" khi có một "chồng chéo":

NOT ( a > f OR b < s )

Chuyển đổi sang 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. Thoát dòng lệnh MYSQL qua Bash Scripting

  2. Chuyển kết quả cơ sở dữ liệu thành mảng

  3. Làm thế nào để thực hiện một mysqldump mà không có lời nhắc mật khẩu?

  4. Làm thế nào để xóa bộ nhớ cache truy vấn trong mysql?

  5. PHP Lỗi nghiêm trọng:Gọi đến hàm không xác định mysqli_stmt_get_result ()