首页 > 解决方案 > 用于检查 JSON 数组中是否存在至少一项的 SQL 正则表达式

问题描述

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

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

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

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

标签: mysqlsqlregex

解决方案


MySQL 原生支持 JSON。我建议不要将其存储为字符串文字,而是将其存储为JSON 数据类型。这样做时,它将打开几个原生函数,如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

推荐阅读