使用 MySQL Json_search 函数使用不区分大小写的搜索获取 JSON 数据中值的路径表达式
Get path expression of a value inside JSON data using case insensitive search using MySQL Json_search function
我有一个要求,我需要从按值搜索的 JSON 数据中提取 JSON 路径表达式。
例如,如果我将 JSON 数据存储为
SET @j = '[{"name":"Kiran Muralee", "age" : 30 , "Salary" : 30000},
{"Name":"Arun Babu", "age" : 35 , "Salary" : 60000}]';
如果我需要获取 JSON 路径值 'Arun Babu' 我可以使用
SELECT JSON_SEARCH(@j, 'all', 'Arun Babu');
这导致
"$[1].Name"
这是对的,但问题是如果我使用值 'arun babu' 进行搜索,它会 returns NULL。所以为了进行不区分大小写的搜索,我使用了
SELECT JSON_SEARCH(lower(@j), 'all', lower('arun babu'));
所以现在我得到的结果是
"$[1].name"
但这不是我需要的,因为现在结果也以小写形式输出,我需要结果是
“$[1].姓名”
任何人都可以提出一个好的解决方案或方法。
MySQL使用的版本是5.7(JSON类型支持的版本)
我们可以通过不区分大小写的排序得到预期的解决方案:
SELECT JSON_SEARCH(@j , 'all', 'arun babu' COLLATE utf8mb4_general_ci);
我有一个要求,我需要从按值搜索的 JSON 数据中提取 JSON 路径表达式。
例如,如果我将 JSON 数据存储为
SET @j = '[{"name":"Kiran Muralee", "age" : 30 , "Salary" : 30000},
{"Name":"Arun Babu", "age" : 35 , "Salary" : 60000}]';
如果我需要获取 JSON 路径值 'Arun Babu' 我可以使用
SELECT JSON_SEARCH(@j, 'all', 'Arun Babu');
这导致
"$[1].Name"
这是对的,但问题是如果我使用值 'arun babu' 进行搜索,它会 returns NULL。所以为了进行不区分大小写的搜索,我使用了
SELECT JSON_SEARCH(lower(@j), 'all', lower('arun babu'));
所以现在我得到的结果是
"$[1].name"
但这不是我需要的,因为现在结果也以小写形式输出,我需要结果是
“$[1].姓名”
任何人都可以提出一个好的解决方案或方法。
MySQL使用的版本是5.7(JSON类型支持的版本)
我们可以通过不区分大小写的排序得到预期的解决方案:
SELECT JSON_SEARCH(@j , 'all', 'arun babu' COLLATE utf8mb4_general_ci);