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

Tại sao hàm phạm vi trên của postgres cho một phạm vi ngày trả về một giới hạn độc quyền?

Tái Câu hỏi số 1 :đóng-mở là cách tiêu chuẩn để xử lý các phạm vi ngày, với lịch sử 20-25 năm trong tài liệu học thuật. Xem trang 24-25 của Dữ liệu Bitemporal của Tom Johnston và cả Phát triển ứng dụng cơ sở dữ liệu hướng thời gian trong SQL bởi Richard Snodgrass.

Nhưng tôi nghĩ một trong những lý do là các phạm vi liên tiếp không có sự chồng chéo. Nếu a[May2016, Jun2016)b[Jun2016, Jul2016) , họ không chia sẻ bất kỳ ngày nào. Vì vậy, chúng "gắn chặt với nhau" và bạn không phải lo lắng về các trường hợp cạnh mà chúng chạm vào.

Lưu ý rằng một nhược điểm (có thể) của đóng mở là bạn không thể chỉ định một phạm vi trống. [May2016, May2016) chỉ đơn giản là tự mâu thuẫn, trong khi [May2016, May2016] là tức thì.

Tái Câu hỏi số 2 :Một lần nữa, nó có thể khác, nhưng tôi có thể nghĩ đến một số lợi thế của việc tạo upper([May2016, Jun2016)) return Jun2016 :

  • Nó trả về cùng một thứ bất kể độ phân giải của dải ô.
  • Nó giống như ý nghĩa toán học của một điểm cuối mở, nơi nó là duy nhất câu trả lời có thể.
  • Nó trả về những gì khớp với "nhãn", vì vậy, có thể nói là ít gây ngạc nhiên hơn.
  • Nó cho phép bạn dễ dàng xem liệu hai phạm vi có "gặp nhau" hay không:upper(a) = lower(b) .

Ngoài ra, lưu ý rằng trong Postgres tất cả các kiểu dữ liệu liên quan đến thời gian là rời rạc. Đã từng có một tùy chọn để biên dịch Postgres với dấu thời gian dựa trên float, nhưng nó không được dùng nữa và tôi chưa bao giờ gặp phải.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các tác vụ Rake dường như bỏ qua cấu hình database.yml

  2. Lỗi Heroku PostgreSQL GROUP_BY trong ứng dụng Rails

  3. sqlalchemy đối xứng nhiều thành một tình bạn

  4. Khởi động lại số khóa chính của các hàng hiện có sau khi xóa hầu hết một bảng lớn

  5. EF6 + quan hệ Postgres dbo.AspNetUsers không tồn tại