Почему подстановочный знак JSON_EXTRACT с LIKE% или%LIKE не работает в базе данных MySQL?
Мне нужно искать данные в таблице MYSQL с данными JSON. С помощью JSON_EXTRACT(@json, "$.link") LIKE '%http%'
работает как положено. Но LIKE 'http%' or '%http'
dosn't!
Означает ли это, что 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
2 ответа
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()
,
Пожалуйста, попробуйте это.JSON_UNQUOTE(JSON_EXTRACT(@json, '$.like')) LIKE '%com%'