Dlaczego doprowadzenie JSONb NULL utrzymany jest raczej kończy się niepowodzeniem, to błąd w specyfikacji?

0

Pytanie

Jak прокомментировано w tej odpowiedzi,

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

prowadzi do "BŁĘDZIE: nie można prowadzić wartość jsonb null do typu integer"... Dobrze, to "sposób PostgreSQL", ale dlaczego nie zrobić to lepiej? Lepiej, niż dodać CASE oferty, to sprawia, że "naturalną" rzecz, czyli prowadzi wartość JSON-NULL do типизированному SQL zero wartości. Więc to nie jest problem realizacji, ale wydaje się, że błąd specyfikacji w PostregSQL: czy tak jest?

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

Najlepsza odpowiedź

2

Powodem jest to, że SQL NULL bardzo różni się od JSON null.

Jeśli chcesz to zrobić:

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)

Użyj NULLIF do konwersji JSON null w SQL NULL.

2021-11-17 05:29:10

W innych językach

Ta strona jest w innych językach

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