SQL正则表达式检查JSON数组中是否存在至少一个项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL正则表达式检查JSON数组中是否存在至少一个项目相关的知识,希望对你有一定的参考价值。

我在mysql 5.6中有一个表,其中包含一个文本类型字段“custom_info”,它将JSON作为字符串存在。这样的JSON存在具有数组的字段“clients”。

为了选择“clients”为空的记录,我使用查询:

select custom_info from users where custom_info like '%"clients":[]%'

我如何检索“clients”数组至少存在一个元素的记录?

答案

由于您只想在]之后返回没有"clients":[的条目,您可以使用

where custom_info REGEXP '"clients":\\[[^]]'

\\[实际上是一个\[模式匹配文字[字符,而[^]]是一个否定括号表达式匹配任何char butr a ]

另一答案

MySQL原生支持JSON。我建议将其存储为JSON data type,而不是存储为字符串文字。这样做,它将打开几个本地函数,如JSON_CONTAINSJSON_EXTRACTJSON_ARRAYJSON_OBJECT

然后你可以使用JSON_CONTAINSJSON_EXTRACT来评估你的结果;就像是:

SELECT * 
FROM   custom_info
WHERE  JSON_CONTAINS(clients, 'some_value_youd_expect_to_be_here')

要么:

SELECT * 
FROM   custom_info
WHERE  JSON_EXTRACT('clients', '$[0]') is not null
另一答案

如果您希望将字段保留为文本类型,则可以使用至少匹配一个字符的_%

select custom_info from users where custom_info like '%"clients":[_%]%'

以上是关于SQL正则表达式检查JSON数组中是否存在至少一个项目的主要内容,如果未能解决你的问题,请参考以下文章

用于检查 4 个不同字符组中的至少 3 个的正则表达式

Python:检查列表中至少一个正则表达式是不是与字符串匹配的优雅方法

ChatGTP,生成正则表达式-至少包含一个大小写字母和数字且有位数限制

ChatGTP,生成正则表达式-至少包含一个大小写字母和数字且有位数限制

数组中的至少一个元素存在于另一个数组中

Mongodb-查询json数组中的字段是不是存在