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_CONTAINS,JSON_EXTRACT,JSON_ARRAY和JSON_OBJECT。
然后你可以使用JSON_CONTAINS或JSON_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数组中是否存在至少一个项目的主要内容,如果未能解决你的问题,请参考以下文章
Python:检查列表中至少一个正则表达式是不是与字符串匹配的优雅方法
ChatGTP,生成正则表达式-至少包含一个大小写字母和数字且有位数限制