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

Why JSON_EXTRACT wildcard with LIKE% or %LIKE does not work in MySQL database?

我需要用 JSON 数据在 MYSQL table 中搜索数据。使用 JSON_EXTRACT(@json, "$.link") LIKE '%http%' 按预期工作。但是 LIKE 'http%' or '%http' 不会!

是不是说JSON_EXTRACT不能用单通配符select匹配?

示例:

这是我的 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 还是 returns JSON。它没有 return "raw" 值,尽管当您使用它来提取单个数字时可能会给人留下这样的印象,因为 JSON 表示数字的方式与 SQL 兼容.字符串不是这种情况。

换句话说:

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

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

returns "https://www.google.com",而不是 https://www.google.com,并且您的 LIKE 必须考虑双引号。

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

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