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

Toán tử không tồn tại:json =json

Tóm lại - sử dụng JSONB thay vì JSON hoặc truyền JSON thành JSONB.

Bạn không thể so sánh các giá trị json. Thay vào đó, bạn có thể so sánh các giá trị văn bản:

SELECT * 
FROM movie_test 
WHERE tags::text = '["dramatic","women","political"]'

Tuy nhiên, lưu ý rằng các giá trị của kiểu JSON được lưu trữ dưới dạng văn bản ở định dạng mà chúng được đưa ra. Do đó, kết quả so sánh phụ thuộc vào việc bạn có nhất quán áp dụng cùng một định dạng hay không:

SELECT 
    '["dramatic" ,"women", "political"]'::json::text =  
    '["dramatic","women","political"]'::json::text      -- yields false!
    

Trong Postgres 9.4+, bạn có thể giải quyết vấn đề này bằng cách sử dụng loại JSONB, được lưu trữ ở định dạng nhị phân phân rã. Giá trị của loại này có thể được so sánh:

SELECT 
    '["dramatic" ,"women", "political"]'::jsonb =  
    '["dramatic","women","political"]'::jsonb           -- yields true

vì vậy truy vấn này đáng tin cậy hơn nhiều:

SELECT * 
FROM movie_test 
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb

Đọc thêm về Các loại JSON.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SAO CHÉP với tên tệp động

  2. Giám sát PostgreSQL chủ động (Góc nhà phát triển / Cố vấn)

  3. Lỗi PostgreSQL:Fatal:tên người dùng vai trò không tồn tại

  4. Kết nối PostgreSQL 9.2.1 với Hibernate

  5. Hàm PostgreSQL / Thủ tục được lưu trữ CURRENT_TIMESTAMP không thay đổi