JSON_EXTRACT_FLOAT64()
函数说明
JSON_EXTRACT_FLOAT64()
用于从 JSON 数据中提取指定路径的数值的值。
如果在 where 条件中进行比较:
- 如果类型为 json 对象比较,使用 JSON EXTRACT();
- 如果类型是字符串类型,使用 JSON_EXTRACT_STRING();
- 如果类型为 float 或者 int,使用
JSON_EXTRACT_FLOAT64()
。
语法结构
select col_name from tab_name where json_extract_float64(jsonDoc, pathExpression)= number;
参数释义
参数 | 说明 |
---|---|
jsonDoc | 这是包含 JSON 数据的列或表达式。 |
pathExpression | 表示在 JSON 文档中访问某个值的路径。一次只能接收一个路径,路径以 $ 开始,表示 JSON 文档的根,后面可以跟随点号 . 和键名或用方括号 [ ] 访问数组的元素。 |
number | 指定 JSON 数据中要提取的值,为数值类型。 |
路径表达式必须以 $
字符开头:
-
,
后跟键名,使用给定键命名对象中的成员。键名需要使用双引号包含。 -
[N]
:选择数组的 path 后,将数组中位置N
处的值命名。数组位置是从零开始的整数。如果数组是负数,则产生报错。 -
路径可以包含
*
或**
通配符: -
.[*]
计算 JSON 对象中所有成员的值。 -
[*]
计算 JSON 数组中所有元素的值。 -
prefix**suffix
:计算以命名前缀开头并以命名后缀结尾的所有路径。 -
文档中不存在的路径(或不存在的数据)评估为
NULL
。
示例
create table student(n1 int,n2 json);
insert into student values
(1,'{"name": "tom", "age": 18, "score": 90,"gender": "male"}'),
(2,'{"name": "bob", "age": 20, "score": 80,"gender": "male"}'),
(3,'{"name": "jane", "age": 17, "score": 95,"gender": "female"}'),
(4,'{"name": "lily", "age": 19, "score": 79,"gender": "female"}');
mysql> select n1 from student where json_extract_float64(n2,'$.age')=19;
+------+
| n1 |
+------+
| 4 |
+------+
1 row in set (0.00 sec)
mysql> select json_extract_float64(n2,'$.age')=19 from student;
+--------------------------------------+
| json_extract_float64(n2, $.age) = 19 |
+--------------------------------------+
| false |
| false |
| false |
| true |
+--------------------------------------+
4 rows in set (0.00 sec)