2016-06-13 50 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