在mysql 5.7及以上版本中使用json_contains函数执行通配符搜索

Man*_*ali 4 mysql json mysql-5.7

我有一些使用该json_object()函数获得的嵌套 json 数据。现在我需要检查我在查询中使用的特定键是否存在某个值:-

select json_object(..) from tblxyz 
  where json_contains(columnname, '{"MyName" : "FirstName LastName"}')
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我需要整个字符串“FirstName LastName”才能在实际结果中找到这一行。现在我需要执行通配符搜索。那是:-

select json_object(..) from tblxyz 
  where json_contains(columnname, '{"MyName" : "FirstName"}')
Run Code Online (Sandbox Code Playgroud)

还应该在最终结果中将此条目返回给我。有人可以建议任何解决方法吗?

小智 6

您可以将 JSON_SEARCH 与通配符一起使用:

SET @j = '{"MyName": "FirstName LastName"}';
SELECT JSON_SEARCH(@j, 'all', 'FirstName%', NULL, '$.MyName');
Run Code Online (Sandbox Code Playgroud)

将返回路径:"$.MyName"

如果您想以此进行过滤,请使用别名并在HAVING子句中检查它:

SELECT JSON_SEARCH(`json_col`, 'all', 'FirstName%', NULL, '$.MyName') as `search`
FROM `users`
HAVING `search` IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

或者..在WHERE

SELECT *
FROM `users`
WHERE JSON_SEARCH(`json_col`, 'all', 'FirstName%', NULL, '$.MyName') IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html