PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Praktik terbaik untuk mengidentifikasi jsonb null di plpgsql

Kedua jawaban tertaut Anda berisi solusi, tetapi mungkin baik untuk memiliki jawaban omnibus.

Postgres diketik dengan kuat. Fungsi dan operatornya mengembalikan tipe tertentu.

-> mengembalikan jsonb. Bandingkan bukan dengan SQL null tetapi 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)

->> mengembalikan teks dan akan mengonversi jsonb null menjadi 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)

Perhatikan bahwa sementara jsonb null hanyalah nilai lain, SQL null sangat istimewa. Null bukan nilai, itu adalah kurangnya nilai. Null tidak berarti apa-apa, bahkan nol . Tampaknya casting null ke jsonb akan menghasilkan jsonb null, tetapi standar SQL mengharuskan null hanya menghasilkan null jika tidak, itu berarti null sama dengan sesuatu.

Inilah sebabnya mengapa jsonb null dapat dikonversi ke null, tetapi null tidak dilemparkan ke jsonb null. null::jsonb adalah nol . Ini tidak nyaman, tetapi diperlukan oleh standar SQL. Ini adalah salah satu alasan mengapa tidak disarankan untuk melakukan bolak-balik antara jsonb dan teks.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Variabel yang ditentukan pengguna di PostgreSQL

  2. Mendapatkan hasil yang diketik dari SQL mentah ActiveRecord

  3. Cara mengkonfigurasi PostgreSQL dengan Postgis untuk menghitung jarak

  4. Mencegah entri yang berdekatan/tumpang tindih dengan EXCLUDE di PostgreSQL

  5. Gagal menghubungkan server AWS-Postgres dengan aplikasi boot musim semi dengan hosting heroku