PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Najlepsza praktyka identyfikowania wartości null jsonb w plpgsql

Obie odpowiedzi, do których prowadzisz, zawierają rozwiązania, ale dobrze byłoby mieć odpowiedź zbiorczą.

Postgres jest mocno napisany. Jego funkcje i operatory zwracają określone typy.

-> zwraca jsonb. Porównaj to nie z wartością null SQL, ale wartością 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)

->> zwraca tekst i przekonwertuje null jsonb na null SQL .

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)

Zauważ, że podczas gdy jsonb null to tylko kolejna wartość, null SQL jest bardzo wyjątkowy. Null nie jest wartością, jest brakiem wartości. Null nic nie znaczy, nawet zero . Może się wydawać, że rzutowanie null na jsonb powinno generować wartość jsonb null, ale standard SQL wymaga, aby null rzutował tylko na null w przeciwnym razie oznaczałoby to, że null jest równoważne czemuś.

Dlatego jsonb null można przekonwertować na null, ale null nie jest rzutowany na jsonb null. null::jsonb jest zerowe . Jest to niewygodne, ale wymagane przez standard SQL. Jest to jeden z powodów, dla których przerzucanie tam iz powrotem między jsonb a tekstem nie jest zalecane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zapobiec/wykryć niedomiar w obliczeniach Postgresql, które używają EXP()

  2. SQL Count dni do pierwszego dnia miesiąca

  3. SQLAlchemy Core CREATE TEMPORARY TABLE AS

  4. Aplikacja Spring Boot 2.1 bez puli połączeń HikariCP

  5. java.lang.ClassNotFoundException:org.postgresql.Driver, Android