mysql - 为什么带有 LIKE% 或 %LIKE 的 JSON_EXTRACT 通配符在 MySQL 数据库中不起作用?

标签 mysql json mysql-5.7 json-extract

我需要用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/

相关文章:

Mysql Order BY 速度

mysql - mysql中Query时间是否包括Lock时间?

php - 有没有办法查询 MySQL 数据库两次并将第二次查询的结果添加到与第一次查询的结果相同的数组中?

json - 如何使用jq分割json中的字符串值并转换为嵌套对象?

python - 无法使用 python 解析 boto3 客户端 json 响应

mysql - 升级后mysql错误如何解决

python - 如何在 Django 的表中列出变长元组?

mysql - 具有两个表和多个数据和价格范围的复杂查询

C# 将json转换为多个类

mysql - 将 default_password_lifetime 变量设置为 0 后,mysql 中的过期用户无法工作