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

Sự khác biệt về thứ tự các ký tự kiểu enum giữa PostgreSQL 9.0 và 9.1

Tôi nghĩ bạn sẽ cần kiểm tra phiên bản PostgreSQL và thay đổi hành vi một cách thích hợp hoặc sử dụng SQL không chạm vào danh mục để xác định thứ tự.

Một ý tưởng cho phần sau, enum giả đưa ra:

CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';

ORDER BY ép kiểu của nhãn enum thành các giá trị của kiểu enum bằng cách sử dụng row_number chức năng cửa sổ có sẵn trong phiên bản 8.4 và mới hơn:

SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;

Điều này giúp bạn có các nhãn được sắp xếp theo một khóa sắp xếp. Trong các phiên bản Pg cũ hơn, Pg sẽ chỉ sắp xếp theo oid của các giá trị enum, trong các phiên bản mới hơn, nó sẽ sử dụng trình sắp xếp, nhưng bạn không cần phải quan tâm theo cách nào cả, bạn vừa nói với PostgreSQL "vui lòng sắp xếp những thứ này theo đúng thứ tự".

Hoặc nếu bạn chỉ cần chúng theo thứ tự mà máy chủ mong đợi, hãy viết:

SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL trùng lặp các hàng với nhiều phép nối bên trái

  2. Nối văn bản vào dữ liệu cột dựa trên cột trong PostgreSQL

  3. PostgreSQL chậm trên một bảng lớn với các mảng và nhiều bản cập nhật

  4. Truy vấn SQL để tìm một hàng có số lượng liên kết cụ thể

  5. Làm thế nào để viết một bảng trong PostgreSQL từ R?