mysql5.7版本json原生函数初体验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21682469/article/details/82012730
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)

猜你喜欢

转载自blog.csdn.net/qq_21682469/article/details/82012730
今日推荐