आपके लिंक किए गए दोनों उत्तरों में समाधान हैं, लेकिन एक सर्वव्यापक उत्तर होना अच्छा हो सकता है।
Postgres दृढ़ता से टाइप किया गया है। इसके कार्य और ऑपरेटर विशिष्ट प्रकार लौटाते हैं।
->
जेसनबी लौटाता है। इसकी तुलना SQL नल से नहीं बल्कि jsonb नल से करें
।
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)
->>
टेक्स्ट लौटाता है और jsonb null को 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)
ध्यान दें कि जबकि jsonb नल सिर्फ एक और मान है, SQL नल बहुत खास है। शून्य एक मूल्य नहीं है, यह एक मूल्य की कमी है। नल बराबर कुछ नहीं, यहां तक कि शून्य भी नहीं . ऐसा लग सकता है कि अशक्त से jsonb को कास्ट करना jsonb नल का उत्पादन करना चाहिए, लेकिन SQL मानक के लिए आवश्यक है कि null केवल null पर कास्ट हो अन्यथा इसका मतलब होगा कि शून्य कुछ के बराबर है।
यही कारण है कि jsonb नल को अशक्त में परिवर्तित किया जा सकता है, लेकिन अशक्त को jsonb नल में नहीं डाला जाता है। null::jsonb
शून्य है . यह असुविधाजनक है, लेकिन SQL मानक द्वारा आवश्यक है। यह एक कारण है कि jsonb और टेक्स्ट के बीच आगे और पीछे कास्टिंग करने की अनुशंसा नहीं की जाती है।