如 在评论这个答案,
SELECT (j->'i')::int FROM (SELECT '{"i":null}'::jsonb) t(j); -- fail
结果,在 "错误:不能投jsonb null到整型"...好的,这是"PostgreSQL的方式",但 为什么不让它更好吗? 比增加 CASE
条款,它是这样做的"自然"的事情,那是铸造一个星空值SQL 类型的空值. 因此,它不是一个执行问题,但这似乎是一个 规范的错误 在PostregSQL: 它是什么?
如 在评论这个答案,
SELECT (j->'i')::int FROM (SELECT '{"i":null}'::jsonb) t(j); -- fail
结果,在 "错误:不能投jsonb null到整型"...好的,这是"PostgreSQL的方式",但 为什么不让它更好吗? 比增加 CASE
条款,它是这样做的"自然"的事情,那是铸造一个星空值SQL 类型的空值. 因此,它不是一个执行问题,但这似乎是一个 规范的错误 在PostregSQL: 它是什么?
其原因是,SQL NULL是相当不同的JSON null
.
如果你想这样做:
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)
使用 null,则 以变换JSON null
到SQL NULL
.