【MySQL】JSON系メモ

目次
JSON_EXTRACT(指定したパスを取得する)
SELECT
JSON_EXTRACT('[1, 2]', '$[0]'), -- 1
JSON_EXTRACT('{"sub1":"英語", "sub2":"数学"}', '$.sub1'), -- "英語"
JSON_EXTRACT('[{"sub":"英語", "score":90}, {"sub":"数学", "score":80}]', '$[0].score'), -- 90
JSON_EXTRACT('{"sub":"英語", "scores":[90, 80]}', '$.scores[1]') -- 80JSON_CONTAINS(指定した値を含んでいるか)
SELECT
JSON_CONTAINS('[1, 2, 3]', '1', '$'), -- 配列に1があるか:1
JSON_CONTAINS('[1, 2, 3]', '9', '$'), -- 配列に9があるか:0
JSON_CONTAINS('{"sub":"英語"}', '"英語"', '$.sub'), -- subが英語か:1
JSON_CONTAINS('{"sub":"英語"}', '"数学"', '$.sub') -- subが数学か:0JSON_CONTAINS_PATH(指定したパスを含んでいるか)
SELECT
JSON_CONTAINS_PATH('[1, 2]', 'one', '$[0]'), -- 0番目の配列があるか:1
JSON_CONTAINS_PATH('[1, 2]', 'one', '$[2]'), -- 2番目の配列があるか:0
JSON_CONTAINS_PATH('[1, 2]', 'one', '$[0]', '$[2]'), -- 0番目 or 2番目の配列があるか:1
JSON_CONTAINS_PATH('[1, 2]', 'all', '$[0]', '$[1]'), -- 0番目 and 1番目の配列があるか:1
JSON_CONTAINS_PATH('[1, 2]', 'all', '$[0]', '$[2]'), -- 0番目 and 2番目の配列があるか:0
JSON_CONTAINS_PATH('{"sub1":"英語", "sub2":"数学"}', 'one', '$.sub1'), -- keyがsub1の要素があるか:1
JSON_CONTAINS_PATH('{"sub1":"英語", "sub2":"数学"}', 'one', '$.sub1', '$.sub3'), -- keyがsub1 or keyがsub3の要素があるか:1
JSON_CONTAINS_PATH('{"sub1":"英語", "sub2":"数学"}', 'all', '$.sub1', '$.sub3') -- keyがsub1 and keyがsub3の要素があるか:0JSON_SEARCH(指定した値のパスを取得)
SELECT
JSON_SEARCH('["a", "b"]', 'one', 'a'), -- "$[0]"
JSON_SEARCH('["a", "b"]', 'one', 'c'), -- null
JSON_SEARCH('["a", "b", "b"]', 'one', 'b'), -- "$[1]"
JSON_SEARCH('["a", "b", "b"]', 'all', 'b'), -- ["$[1]", "$[2]"]
JSON_SEARCH('{"sub1":"英語", "sub2":"数学", "sub3":"数学"}', 'one', '英語'), -- "$.sub1"
JSON_SEARCH('{"sub1":"英語", "sub2":"数学", "sub3":"数学"}', 'one', '国語'), -- null
JSON_SEARCH('{"sub1":"英語", "sub2":"数学", "sub3":"数学"}', 'one', '数学'), -- "$.sub2"
JSON_SEARCH('{"sub1":"英語", "sub2":"数学", "sub3":"数学"}', 'all', '数学') -- ["$.sub2", "$.sub3"]
JSON_KEYS(パスを取得)
SELECT
JSON_KEYS('{"sub1":"英語", "sub2":"数学"}'), -- ["sub1", "sub2"]
JSON_KEYS('{"key":"value", "sub":{"name":"英語", "point":90}}'), -- ["key", "sub"]
JSON_KEYS('{"key":"value", "sub":{"name":"英語", "point":90}}', '$.sub') -- ["name", "point"]JSON_TABLE(JSONをテーブルに変換)
SELECT
*
FROM
JSON_TABLE(
'[{"name":"東京駅", "x":35.6812405, "y":139.7645499}, {"name":"渋谷駅", "x":35.6580382, "y":139.6990609}]',
"$[*]" COLUMNS(
name VARCHAR(255) PATH '$.name',
x DOUBLE PATH '$.x',
y DOUBLE PATH '$.y'
)
) AS json_split| name | x | y |
|---|---|---|
| 東京駅 | 35.6812405 | 139.7645499 |
| 渋谷駅 | 35.6580382 | 139.6990609 |
以上になります。
お読み頂き、ありがとうございました。


