为什么将JSONb NULL转换为类型失败,这是一个规范错误



如本答案所述,

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

导致";错误:无法将jsonb null强制转换为integer"类型。。。好的,这是";PostgreSQL方式";,但是为什么不让它变得更好呢与其添加CASE子句,不如做"天然的";事情,即将JSON-NULL值强制转换为SQL类型的NULL值。所以,这不是一个实现问题,但它似乎是PostregSQL中的规范错误是吗

原因是SQL NULL与JSONnull有很大不同。

如果你想这样做:

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)

使用NULLIF将JSONnull转换为SQLNULL

相关内容

最新更新