我需要用JSON数据在MYSQL表中搜索数据。使用 JSON_EXTRACT(@json, "$.link") LIKE '%http%'
按预期工作。但是 LIKE 'http%' 或 '%http'
不会!
是不是说JSON_EXTRACT不能和单通配选择匹配一起使用?
示例:
这是我的JSON
set @json = '{"link": "https://www.google.com"}' ;
select JSON_EXTRACT(@json, "$.link") like '%com';
-- returns 0
select JSON_EXTRACT(@json, "$.link") like 'http%' ;
-- returns 0
select JSON_EXTRACT(@json, "$.link") like '%google%' ;
select JSON_EXTRACT(@json, "$.link") like '%http%' ;
select JSON_EXTRACT(@json, "$.link") like '%com%' ;
-- returns 1 !
下面是 Fiddle 中的示例:https://www.db-fiddle.com/f/7yPvfa2UZsZLdYSxdsnecx/0
最佳答案
JSON_EXTRACT 仍然返回 JSON。它不返回“原始”值,尽管当您使用它来提取单个数字时可能会给人留下这样的印象,因为 JSON 表示数字的方式与 SQL 兼容。字符串不是这种情况。
换句话说:
set @json = '{"link": "https://www.google.com"}' ;
select JSON_EXTRACT(@json, "$.link");
返回 "https://www.google.com"
,而不是 https://www.google.com
,以及您的LIKE
必须考虑双引号。
要将 JSON 字符串转换为实际的 MySQL 字符串,请使用 JSON_UNQUOTE()
.
关于mysql - 为什么带有 LIKE% 或 %LIKE 的 JSON_EXTRACT 通配符在 MySQL 数据库中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490933/