Neden JSONb NULL bir türe döküm başarısız olur, bu bir belirtim hatasıdır?

0

Soru

Bu cevapta yorumlandığı gibi,

SELECT (j->'i')::int FROM  (SELECT '{"i":null}'::jsonb) t(j); -- fail

"HATA: tamsayı yazmak için jsonb null atanamıyor" ile sonuçlanır... Tamam, bu "PostgreSQL yolu", ama neden daha iyi yapmıyorsunuz? Eklemekten daha iyi CASE yan tümceler, "doğal" şeyi yapıyor, yani bir SQL yazılan boş değere bir JSON-NULL değeri atıyor. Yani, bu bir uygulama sorunu değil, ancak postregsql'de bir şartname hatası gibi görünüyor: öyle mi?

casting jsonb postgresql
2021-11-16 19:53:05
1

En iyi cevabı

2

Bunun nedeni, SQL null'un json'dan oldukça farklı olmasıdır null.

Eğer bunu yapmak istiyorsan:

SELECT nullif((j->'i'), 'null')::int FROM  (SELECT '{"i":null}'::jsonb) t(j);
 nullif 
--------
   NULL
(1 row)

 SELECT pg_typeof(nullif((j->'i'), 'null')::int) FROM  (SELECT '{"i":null}'::jsonb) t(j);
 pg_typeof 
-----------
 integer


SELECT nullif((j->'i'), 'null')::int FROM  (SELECT '{"i": 1}'::jsonb) t(j);
 nullif 
--------
      1
(1 row)

Json'u dönüştürmek için NULLİF kullanın null sql'e NULL.

2021-11-17 05:29:10

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................