如何在 JSON 列中对数组成员执行不区分大小写的搜索?

问题描述 投票:0回答:1

我遇到过一种情况,我们将标签存储在 JSON 数组中,并且客户端开始使用它作为键值存储。 我现在需要添加一种不区分大小写搜索此数据的方法。

例如,如果 JSON 列包含

{
  "tags": ["Key1:value1", "Key2:value2"]
}

如何在数组中成功搜索到“Key1:VaLuE1”?

我目前正在这样查询,其中

meta
是JSON列:

select * from events where "Key1:value1" member of (meta->"$.tags");

我尝试过在where条件的两侧添加

collate utf8mb4_general_ci
,但它不起作用。 我也尝试过进行
LIKE
比较,但这不起作用,因为我需要确保它只检索完整的字符串(例如不是“Key1:val”)。 我还想避免更改表来更改整个 JSON 列的排序规则,但如果这是唯一的选择,我会考虑这一点。

sql mysql mysql-8.0
1个回答
0
投票

您可以解决 JSON 数组中不区分大小写的搜索问题,同时可以确保字符串比较检查完全匹配(而不是部分匹配),因此您可以结合使用 JSON_EXTRACTLOWER 函数

试试这个

SELECT * 
FROM events 
WHERE LOWER(JSON_UNQUOTE(JSON_EXTRACT(meta, '$.tags'))) = LOWER('Key1:VaLuE1');
© www.soinside.com 2019 - 2024. All rights reserved.