2

我需要使用 JSON 数据在 MYSQL 表中搜索数据。使用JSON_EXTRACT(@json, "$.link") LIKE '%http%'按预期工作。但是LIKE 'http%' or '%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 !

这是小提琴中的一个例子:https ://www.db-fiddle.com/f/7yPvfa2UZsZLdYSxdsnecx/0

4

2 回答 2

4

JSON_EXTRACT 仍然返回 JSON。它不会返回“原始”值,尽管当您使用它来提取单个数字时可能会产生这种印象,因为 JSON 表示数字的方式与 SQL 兼容。字符串不是这种情况。

换句话说:

set @json = '{"link": "https://www.google.com"}' ; 

select JSON_EXTRACT(@json, "$.link"); 

return "https://www.google.com", not https://www.google.com,并且您LIKE必须考虑双引号。

要将 JSON 字符串转换为实际的 MySQL 字符串,请使用JSON_UNQUOTE().

于 2019-08-14T08:37:25.270 回答
0

请试试这个。JSON_UNQUOTE(JSON_EXTRACT(@json, '$.like')) LIKE '%com%'

于 2021-05-08T09:20:32.350 回答