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

Date_trunc của PostgreSQL trong mySQL

Hàm trích xuất có vẻ hữu ích và hàm ngày mà tôi đã tìm thấy giải quyết được một số vấn đề của tôi, nhưng có cách nào để sao chép date_trunc của PostgreSQL không?

Thật vậy, EXTRACT có vẻ như đây sẽ là kết quả phù hợp nhất cho trường hợp cụ thể này.

Mã gốc của bạn trong PG:

WHERE date_trunc('month', QUERY_DATE) BETWEEN 
    date_trunc('month', now()) - INTERVAL '4 MONTH' AND 
    date_trunc('month', now() - INTERVAL '1 WEEK')

Sử dụng EXTRACT :

WHERE EXTRACT(YEAR_MONTH FROM QUERY_DATE)
      BETWEEN
          EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 4 MONTH)
      AND
          EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 1 WEEK)

Mặc dù nó phải giống hệt nhau về mặt chức năng, nhưng điều này thực sự đang trộn các ngày tháng thành một chuỗi YYYYMM trước khi thực hiện so sánh.

Một tùy chọn khác sẽ được sử dụng DATE_FORMAT để xây dựng lại chuỗi ngày và buộc nó vào đầu tháng:

WHERE DATE_FORMAT(QUERY_DATE, '%Y-%m-01')
      BETWEEN
          DATE_FORMAT(NOW() - INTERVAL 4 MONTH, '%Y-%m-01')
      AND
          DATE_FORMAT(NOW() - INTERVAL 1 WEEK, '%Y-%m-01')

Ngoài ra, hãy lưu ý rằng MySQL thực sự kém trong việc xử lý các phạm vi ngày, ngay cả khi trường được lập chỉ mục. Có thể bạn sẽ phải quét toàn bộ bảng nếu không cẩn thận.



  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 kiểm tra SQL đặc biệt của tôi với các tham số trong cửa sổ truy vấn Postgres

  2. Hàm SQL rất chậm so với truy vấn không có trình bao bọc hàm

  3. Bỏ qua hoàn toàn múi giờ trong Rails và PostgreSQL

  4. PostgreSql 'PDOException' với thông báo 'không thể tìm thấy trình điều khiển'

  5. Cách tải xuống cột Postgres bytea dưới dạng tệp