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

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

または、次のように仮想フィールドを作成します。私は通常、このように構文を使用する必要がありますか? NULLの代わりにNULL値を送ることは可能ですか? –

+0

@MarshallTigerus私はMySQLが許可しているとは思わない。 AFAIKのみのJSON値が許可されています。この問題がこのコードでも明らかになっていることを考えてみましょう: 'SELECT COALESCE(JSON_EXTRACT(" hello "、NULL)、 '$ .hello')、 'world')' – obe

+0

なぜダウン投票..? – obe

答えて

0

はあなたが 'と呼ばれるJSON列を含む「mytableは」と呼ばれるテーブルがあるとし...それを行うための適切な方法のように見えるしていません。データ'。あなたはこれを解析しているJSONを生成しているものを

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