MySQL的json_contains函数是否支持不区分大小写?

3

我希望能够使用 json_contains 进行不区分大小写的搜索。

以下是 json 示例:

[
  {
    "title": "foo Bar",
    "author": "melaine"
  },
  {
    "title": "incredible",
    "author": "steve"
  }
]

我尝试过:

SELECT json_contains('[{"title":"foo Bar", "authour": "melaine"}, {"title":"foo barius", "authour": "steve"}]', '{"title":"foo bar"}')

预期结果:1

实际结果:0

因为我搜索的是 "foo bar",但在 JSON 中的值是 "foo Bar",所以我没有找到匹配项。有没有一种方法可以使其大小写不敏感,这样我就可以找到匹配项?

1个回答

8

您可以使用 LOWER() 函数将 JSON(干草堆)和搜索块(针)都转换为小写字母,以进行不区分大小写的搜索:

SELECT json_contains(LOWER('[{"title":"foo Bar", "authour": "melaine"}, {"title":"foo barius", "authour": "steve"}]'), 
                     LOWER('{"title":"foo bar"}'))

DB Fiddle演示


1
这比我想象的要容易得多,谢谢!我还有一个问题:如果干草堆是一列行填充着类似的JSON值,这个方法是否也适用?或者这只适用于这个小例子,其中干草堆只是一个字符串? - dylanvanw
1
@dylanvanw 你可以这样做:JSON_CONTAINS(JSON_EXTRACT(LOWER(COLUMN_NAME), '$.NODE'), LOWER('{"title":"foo bar"}')) - Daniel Hernández
这是对问题的正确答案,但你不能预料到所有可能的情况:那fOo baR呢?应该有一个更广泛的结果的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接