2016-06-13 208 views
0

此代码:如何将MySQL 5.7 JSON NULL转换为本地MySQL NULL?

SELECT JSON_EXTRACT('{"hello": null}', '$.hello') 

返回null

但是,这不是MySQL本机NULL。例如,这个:

SELECT COALESCE(JSON_EXTRACT('{"hello": null}', '$.hello'), 'world') 

也产生null

如何将此JSON null转换为MySQL原生NULL

我想,我可以用IF一些比较,但它似乎并不像正确的方式来做到这一点...

+0

什么是你生成与此解析JSON?它可能发送NULL值而不是null? –

+0

@MarshallTigerus我不认为MySQL允许这样做。 AFAIK只允许JSON值。考虑到这个问题也在这段代码中体现出来了:'SELECT COALESCE(JSON_EXTRACT(JSON_OBJECT(“hello”,NULL),'$ .hello'),'world')' – obe

+0

以及为什么down表决..? – obe

回答

0

假设你有一个名为“mytable的”表包含一个名为“一个JSON列数据'。我通常都使用这样的结构:

SELECT 
    CASE WHEN data->>'$.myfield' = 'null' THEN NULL ELSE data->>'$.myfield' END myfield 
FROM mytable 

或者创建一个虚拟的领域如下:

ALTER TABLE mytable ADD myfield VARCHAR(200) GENERATED ALWAYS AS (
    CASE WHEN data->>'$.myfield' = 'null' THEN NULL ELSE data->>'$.myfield' END 
) VIRTUAL; 
0
SELECT COALESCE(IF(JSON_TYPE(JSON_EXTRACT('{"hello":null}', '$.hello')) = 'NULL', NULL, JSON_EXTRACT('{"hello":null}', '$.hello')), 'world'); 
+4

一些解释的词汇通常在堆栈溢出时被理解。 – mkl