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

Làm cách nào để kết hợp cả ngày với trường ngày giờ?

Truyền timestamp của bạn giá trị thành date nếu bạn muốn cú pháp đơn giản. Như thế này:

SELECT *
FROM   tbl
WHERE  timestamp_col::date = '2011-12-01';  -- date literal

Tuy nhiên, với các bảng lớn, việc này sẽ nhanh hơn:

SELECT *
FROM   tbl
WHERE  timestamp_col >= '2011-12-01 0:0'    -- timestamp literal
AND    timestamp_col <  '2011-12-02 0:0';

Lý do:truy vấn thứ hai không phải chuyển đổi mọi giá trị đơn lẻ trong bảng và có thể sử dụng một chỉ mục đơn giản trên cột dấu thời gian. Biểu thức là sargable.

Lưu ý đã loại trừ giới hạn trên (< thay vì <= ) để có lựa chọn chính xác.
Bạn có thể bù đắp điều đó bằng cách tạo chỉ mục trên một biểu thức như sau:

CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));

Sau đó, phiên bản đầu tiên của truy vấn sẽ nhanh như cũ.



  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ách EXCEPT hoạt động trong PostgreSQL

  2. Hàm với truy vấn SQL không có đích cho dữ liệu kết quả

  3. Làm cách nào để loại bỏ ký tự xuống dòng và dòng mới trong Postgresql?

  4. Đọc cam kết là điều bắt buộc đối với cơ sở dữ liệu SQL phân tán tương thích với Postgres

  5. Sử dụng bản sao lôgic PostgreSQL để duy trì máy chủ kiểm tra đọc / ghi luôn cập nhật