Webエンジニアのメモ帳

技術的な話を中心に書いています。

【MySQL】JSON形式ではないデータのみを抽出する方法

short answer

以下のSQLで、特定のカラムにJSON以外のデータが入っているレコードを抽出することができます。

SELECT {カラム名} FROM {テーブル名} WHERE NOT JSON_VALID({カラム名})

解説

JSON_VALIDは、対象のカラムのデータが正しいJSON形式であれば1を、JSON形式ではないがNULLでなければ0を、NULLならNULLを返します。

これをWHERE句に指定することで、特定のカラムにJSONが入っているデータのみ、あるいはそれ以外のデータを抽出することが可能となります。

ちなみに

WHERE JSON_VALID({カラム名})

WHERE NOT JSON_VALID({カラム名})

を指定した場合、該当のカラムにNULLが入っているレコードは取得されません。

もし合わせて取得したい場合は

WHERE JSON_VALID({カラム名}) IS NOT TRUE

とすると、該当のカラムにJSONでないデータかNULLが入っているレコードが取得されます。