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

时间:2019-04-22 13:47:59

标签: mysql sql regex

我在MySQL 5.6中有一个表,其文本类型字段为“ custom_info”,该字段以字符串形式存在JSON。这样的JSON的存在字段“ clients”带有数组。

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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

\\[实际上是与文字\[字符匹配的[模式,而[^]]是与]的任何字符匹配的否定括号表达式。

答案 2 :(得分:1)

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

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