1. 程式人生 > >mysql5.7版本json原生函式初體驗

mysql5.7版本json原生函式初體驗

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.18-log |
+------------+
1 row in set (0.00 sec)
  • 測試資料
mysql> select disk from device_status limit 1;
+--------------------------------------------------------------------------------------+
| disk                                                                                 |
+--------------------------------------------------------------------------------------+
| {"used": 366975299584, "total": 994344431616, "percent": 36.9, "free": 627369132032} | +--------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
  • json_extract()函式使用

  • 解析json資料,並打散重新排序

mysql> select json_extract(disk,'$.*') from device_status limit 1;
+--------------------------------------------------+
| json_extract(disk,'$.*') | +--------------------------------------------------+ | [627369132032, 366975299584, 994344431616, 36.9] | +--------------------------------------------------+ 1 row in set (0.00 sec)
  • 解析json中某個資料
mysql> select json_extract(disk,'$.used') used from device_status limit 1;
+--------------+
| used | +--------------+ | 366975299584 | +--------------+ 1 row in set (0.00 sec)
  • 聚合
mysql> select count(*) count, sum(json_extract(disk,'$.used')) used_sum from device_status limit 1;
+-------+-----------------+
| count | used_sum        |
+-------+-----------------+
|  2000 | 498959377707008 |
+-------+-----------------+
1 row in set (0.01 sec)
  • 查詢
mysql> select * from setting;
+---------------------+----------------+
| name                | value          |
+---------------------+----------------+
| access_ips          | []             |
| error_count         | 5              |
| life_time           | 20             |
| password_min_length | 8              |
| password_includes   | ["lower_case"] |
+---------------------+----------------+
5 rows in set (0.00 sec)
mysql> select * from setting where json_contains(value, '"lower_case"');
+-------------------+----------------+
| name              | value          |
+-------------------+----------------+
| password_includes | ["lower_case"] |
+-------------------+----------------+
1 row in set (0.00 sec)
mysql> select count(*), avg(json_extract(cpu, '$.idle')) from device_status where cpu->'$.idle' = 96.7;
+----------+----------------------------------+
| count(*) | avg(json_extract(cpu, '$.idle')) |
+----------+----------------------------------+
|       14 |                          96.7000 |
+----------+----------------------------------+
1 row in set (0.01 sec)
mysql> select count(*), avg(json_extract(cpu,'$.idle')) from device_status where json_contains(cpu,'96.7','$.idle');
+----------+---------------------------------+
| count(*) | avg(json_extract(cpu,'$.idle')) |
+----------+---------------------------------+
|       14 |                         96.7000 |
+----------+---------------------------------+
1 row in set (0.01 sec)