「MySQL 8.0.29」パス指定でJSON型のデータを抽出する

環境
Ubuntu 22.04 LTS
MySQL 8.0.29-0ubuntu0.22.04.2

書式
SELECT `col`->"$.name" FROM テーブル名;
オブジェクトの場合 ->"$.key" の形式でjsonデータを抽出します。
リストの場合 ->"$[]" の形式でjsonデータを抽出します

使用例1
SQL構文
SELECT `col`->"$.name" FROM `json_userstbl`;
実行結果

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mysql> SELECT `col`->"$.name" FROM `json_userstbl`;
+-----------------+
| `col`->"$.name" |
+-----------------+
| "user11" |
| "user22" |
| "user33" |
+-----------------+
3 rows in set (0.07 sec)
mysql> SELECT `col`->"$.name" FROM `json_userstbl`; +-----------------+ | `col`->"$.name" | +-----------------+ | "user11" | | "user22" | | "user33" | +-----------------+ 3 rows in set (0.07 sec)
mysql> SELECT `col`->"$.name" FROM `json_userstbl`;
+-----------------+
| `col`->"$.name" |
+-----------------+
| "user11"        |
| "user22"        |
| "user33"        |
+-----------------+
3 rows in set (0.07 sec)

使用例2
書式
SELECT JSON_UNQUOTE(`col`->"$.name") FROM `テーブル名`
JSON_UNQUOTE関数 を利用して、ダブルクォートを取り除きます。

実行結果

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mysql> SELECT JSON_UNQUOTE(`col`->"$.name") FROM `json_userstbl`;
+-------------------------------+
| JSON_UNQUOTE(`col`->"$.name") |
+-------------------------------+
| user11 |
| user22 |
| user33 |
+-------------------------------+
3 rows in set (0.02 sec)
mysql> SELECT JSON_UNQUOTE(`col`->"$.name") FROM `json_userstbl`; +-------------------------------+ | JSON_UNQUOTE(`col`->"$.name") | +-------------------------------+ | user11 | | user22 | | user33 | +-------------------------------+ 3 rows in set (0.02 sec)
mysql> SELECT JSON_UNQUOTE(`col`->"$.name") FROM `json_userstbl`;
+-------------------------------+
| JSON_UNQUOTE(`col`->"$.name") |
+-------------------------------+
| user11                        |
| user22                        |
| user33                        |
+-------------------------------+
3 rows in set (0.02 sec)

 

MySQL

Posted by arkgame