MySQL中如何查询JSON数组任意位置的指定字符串?
解决JSON数组中搜索指定字符串的问题
你可以用MySQL的JSON_CONTAINS()函数直接判断目标字符串是否存在于JSON数组中,这比用JSON_EXTRACT()遍历数组更高效准确。
示例代码
直接匹配字符串(注意要给目标字符串套双引号,符合JSON格式对字符串的要求):
SELECT classification FROM Skills.skills WHERE JSON_CONTAINS(classification, '"Accounting"');
如果不想手动加双引号,也可以用JSON_QUOTE()函数自动处理格式:
SELECT classification FROM Skills.skills WHERE JSON_CONTAINS(classification, JSON_QUOTE('Accounting'));
额外选项:定位匹配位置
如果需要知道目标字符串在数组中的具体路径,可以用JSON_SEARCH()函数:
SELECT classification, JSON_SEARCH(classification, 'one', 'Accounting') AS match_position FROM Skills.skills WHERE JSON_SEARCH(classification, 'one', 'Accounting') IS NOT NULL;
这里的'one'表示只返回第一个匹配的位置,换成'all'可以得到所有匹配的路径。
为什么之前的方法失效
用JSON_EXTRACT(classification, '$[*]')会返回整个JSON数组(比如["Accounting","Administration & Office Support",...]),你直接拿这个数组和单个字符串"Accounting"比较,类型和内容都不匹配,所以查不到结果。
内容的提问来源于stack exchange,提问作者thepunter99
相关产品推荐
相关产品推荐

