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

Phương pháp hay nhất để xác định jsonb null trong plpgsql

Cả hai câu trả lời được liên kết của bạn đều chứa các giải pháp, nhưng có thể sẽ tốt nếu có một câu trả lời đa phương tiện.

Postgres được đánh máy mạnh mẽ. Các hàm và toán tử của nó trả về các kiểu cụ thể.

-> trả về jsonb. So sánh nó không phải với SQL null mà là jsonb null .

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'i_am_null' = 'null'::jsonb;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'a_string' = 'null'::jsonb;
 ?column? 
----------
 f
(1 row)

->> trả về văn bản và sẽ chuyển đổi jsonb null thành SQL null .

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'i_am_null' is null;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'a_string' is null;
 ?column? 
----------
 f
(1 row)

Lưu ý rằng trong khi jsonb null chỉ là một giá trị khác, thì SQL null rất đặc biệt. Null không phải là một giá trị, nó là thiếu một giá trị. Null không bằng gì, thậm chí không bằng rỗng . Có vẻ như việc truyền null sang jsonb sẽ tạo ra jsonb null, nhưng tiêu chuẩn SQL yêu cầu rằng null chỉ truyền thành null nếu không thì điều đó có nghĩa là null tương đương với một cái gì đó.

Đây là lý do tại sao jsonb null có thể được chuyển đổi thành null, nhưng null không được chuyển thành jsonb null. null::jsonb là null . Điều này là bất tiện, nhưng yêu cầu của tiêu chuẩn SQL. Đó là một trong những lý do khiến việc truyền qua lại giữa jsonb và văn bản không được khuyến khích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển dữ liệu giữa các cơ sở dữ liệu với PostgreSQL

  2. Làm cách nào để ghi nhật ký các câu lệnh SQL trong Vapor 3 / Fluent?

  3. Tạo bản sao của hàm C nội bộ PostgreSQL và tải nó dưới dạng hàm do người dùng xác định

  4. Không thể tạo dịch vụ được yêu cầu [org.hibernate.engine.jdbc.env.spi.JdbcEnosystem]

  5. Tại sao tất cả các cơ sở dữ liệu đều có một lược đồ công khai trong PostgreSQL?