我在MySQL 5.6中有一个表,其文本类型字段为“ custom_info”,该字段以字符串形式存在JSON。这样的JSON的存在字段“ clients”带有数组。
为了选择“客户”为空的记录,我使用查询:
select custom_info from users where custom_info like '%"clients":[]%'
如何检索“客户”数组至少存在一个元素的记录?
答案 0 :(得分:5)
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
答案 1 :(得分:2)
由于您只想返回]
之后没有"clients":[
的条目,因此可以使用
where custom_info REGEXP '"clients":\\[[^]]'
\\[
实际上是与文字\[
字符匹配的[
模式,而[^]]
是与]
的任何字符匹配的否定括号表达式。
答案 2 :(得分:1)
如果您想将字段保留为文本类型,则可以使用_%
,它将至少匹配一个字符
select custom_info from users where custom_info like '%"clients":[_%]%'