一个text类型的字段中,存放的是数组,数据里面是多个json数据,要一次判断数组是否为空,json里面是否包含特定的json键
时间: 2024-03-10 11:45:52 浏览: 108
可以使用JSON_EXTRACT函数和JSON_LENGTH函数来实现。
假设你的表名为table,要查询的字段名为field,特定的json键为key_name。可以使用以下SQL语句:
```
SELECT JSON_LENGTH(JSON_EXTRACT(field, '$')) AS array_length, COUNT(JSON_EXTRACT(field, '$[0]."key_name"')) AS count_key_name
FROM table
WHERE field IS NOT NULL
HAVING array_length > 0 AND count_key_name > 0;
```
解释一下:
1. `JSON_EXTRACT(field, '$')` 表示从field字段中提取所有的json数据,返回一个json数组。
2. `JSON_LENGTH` 函数返回json数组的长度,即json数据的数量。
3. `JSON_EXTRACT(field, '$[0]."key_name"')` 表示从第一个json数据中提取key_name键的值,如果该键存在,则返回值不为NULL,否则返回NULL。
4. `COUNT` 函数统计返回值不为NULL的数量,即json数据中包含key_name键的数量。
5. `WHERE field IS NOT NULL` 表示只查询field字段值不为NULL的行,避免出现空指针异常。
6. `HAVING array_length > 0 AND count_key_name > 0` 表示只查询json数组不为空且至少包含一个包含key_name键的json数据的行。
这样就能查询到符合条件的行了。
阅读全文