我已经开始在mysql 5.7中使用JSON数据类型.有没有办法提取没有引号的值?例如,在设置虚拟索引时.
例:
mysql> INSERT INTO test (data) VALUES ('{"type": "user" ,
"content" : { "username": "jdoe", "firstname" : "John", "lastname" : "Doe" } }');
mysql> SELECT json_extract(data,'$.type') FROM test;
+-----------------------------+
| json_extract(data,'$.type') |
+-----------------------------+
| "user" |
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
如何获得
+-----------------------------+
| json_extract(data,'$.type') |
+-----------------------------+
| user |
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
?
Moh*_*Mad 58
您可以使用 - >>运算符来简单地提取未加引号的数据!
SELECT JSONCOL->>'$.PATH' FROM tableName
Run Code Online (Sandbox Code Playgroud)
另外两种方式:
注意:有三种不同的方式可以产生相同的命令,如下所述EXPLAIN:
与 - >一样, - >>运算符总是在EXPLAIN的输出中展开,如下例所示:
Run Code Online (Sandbox Code Playgroud)EXPLAIN SELECT c->>'$.name' AS name FROM jemp WHERE g > 2 ; SHOW WARNINGS ; *************************** 1. row *************************** Level: Note Code: 1003 Message: /* select#1 */ select json_unquote(json_extract(`jtest`.`jemp`.`c`,'$.name')) AS `name` from `jtest`.`jemp` where (`jtest`.`jemp`.`g` > 2) 1 row in set (0.00 sec)
有关MySQL参考手册的更多信息,请访问https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path
注意:在MySQL 5.7.13中添加了 - >>运算符
小智 43
您可以使用JSON_UNQUOTE()方法:
SELECT JSON_UNQUOTE(json_extract(data,'$.type')) FROM test;
Run Code Online (Sandbox Code Playgroud)
此方法将处理内部引号,例如:
SET @t1 := '{"a": "Hello \\\"Name\\\""}';
SET @j := CAST(@t1 AS JSON);
SET @tOut := JSON_EXTRACT(@j, '$.a');
SELECT @t1, @j, @tOut, JSON_UNQUOTE(@tOut), TRIM(BOTH '"' FROM @tOut);
Run Code Online (Sandbox Code Playgroud)
会给:
@t1 : {"a": "Hello \"Name\""}
@j : {"a": "Hello \"Name\""}
@tOut : "Hello \"Name\""
unquote : Hello "Name"
trim : Hello \"Name\
Run Code Online (Sandbox Code Playgroud)
我相信在几乎所有情况下,unquote都会更好.
小智 11
另一种方法是;
SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.type')) FROM test
Run Code Online (Sandbox Code Playgroud)
Luk*_*zda 10
MySQL 8.0.21 支持JSON_VALUE函数
从指定文档中给定路径处的 JSON 文档中提取值,并返回提取的值,可以选择将其转换为所需的类型。完整的语法如下所示:
Run Code Online (Sandbox Code Playgroud)JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error]) on_empty: {NULL | ERROR | DEFAULT value} ON EMPTY on_error: {NULL | ERROR | DEFAULT value} ON ERROR如果未通过 RETURNING 子句指定,则 JSON_VALUE() 函数的返回类型为 VARCHAR(512)
SELECT json_value(data,'$.type')
FROM test;
-- user
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14727 次 |
| 最近记录: |