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

Cách kiểm tra ngày trùng lặp trong PostgreSQL

Trong PostgreSQL, bạn có thể sử dụng OVERLAPS để kiểm tra các khoảng thời gian trùng lặp.

Hàm trả về true khi hai khoảng thời gian (được xác định bởi điểm cuối của chúng) trùng nhau và false khi chúng không chồng lên nhau.

Cú pháp

Nó có thể được sử dụng theo hai cách sau:

(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)

Nói cách khác, bạn cung cấp ngày / giờ bắt đầu, sau đó bạn có tùy chọn cung cấp ngày / giờ kết thúc hoặc khoảng thời gian.

Cụ thể hơn, các điểm cuối có thể được chỉ định dưới dạng các cặp ngày, giờ hoặc dấu thời gian; hoặc dưới dạng ngày, giờ hoặc dấu thời gian theo sau là khoảng thời gian.

Khi một cặp giá trị được cung cấp, phần đầu hoặc phần cuối có thể được viết trước; OVERLAPS tự động lấy giá trị trước đó của cặp làm giá trị bắt đầu.

Ví dụ

Đây là một ví dụ cơ bản để chứng minh.

SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
       (date '2022-02-09', date '2022-03-10');

Kết quả:

True

Kết quả là đúng vì cả hai khoảng thời gian trùng nhau.

Đây là một lần nữa, nhưng lần này tôi thay đổi các khoảng thời gian để chúng không trùng lặp.

SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
       (date '2022-02-09', date '2022-03-08');

Kết quả:

False

Điểm cuối chung

Điều quan trọng cần lưu ý là mỗi khoảng thời gian được coi là đại diện cho khoảng thời gian nửa mở start <= time < end , trừ khi start end bằng nhau trong trường hợp đó nó đại diện cho thời điểm duy nhất đó. Điều này có nghĩa là hai khoảng thời gian chỉ có một điểm cuối chung không trùng lặp.

Trong ví dụ tiếp theo, khoảng thời gian thứ hai bắt đầu vào cùng ngày mà khoảng thời gian đầu tiên kết thúc.

SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
       (date '2022-02-10', date '2022-03-10');

Kết quả:

False

Tuy nhiên, chúng tôi nhận được một kết quả khác nếu cả hai điểm cuối của khoảng thời gian đầu tiên đều giống nhau:

SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
       (date '2022-01-09', date '2022-02-10');

Kết quả:

True

Khoảng thời gian

Như đã đề cập, điểm cuối thứ hai có thể là một khoảng thời gian.

SELECT (date '2022-01-09', interval '32 days') OVERLAPS
       (date '2022-02-09', date '2022-03-10');

Kết quả:

True

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Số hàng tối đa (có thể sử dụng) trong bảng Postgresql

  2. Nhận kích thước của đối tượng lớn trong truy vấn PostgreSQL?

  3. Công bố Barman 1.0, Trình quản lý sao lưu và phục hồi cho PostgreSQL

  4. Tên bảng dưới dạng tham số hàm PostgreSQL

  5. Làm cách nào để sử dụng dữ liệu mùa xuân jpa để truy vấn cột jsonb?