选择查询包含json数组中特定值的行?

时间:2020-08-05 03:05:44

标签: mysql json

我目前有这张桌子

ID | Seller_Name | Seller_Non_Working_Day
1 | Seller A | [1,7]
2 | Seller B | [1]
3 | Seller C | []
4 | Seller D | [1,7]

我正在尝试提取仅在周日不工作的卖方,也就是在Seller_Non_Working_Day中使用[1]。此字段是JSON类型。

这是我的查询,但没有得到任何响应:(

select * from table_name
where Seller_Non_Working_Day IN ('[1]')

可以协助吗?

1 个答案:

答案 0 :(得分:0)

MySQL JSON_OVERLAPS 函数比较两个doc_path或数组。如果值不匹配,则返回0,如果不匹配,则返回1。

JSON_OVERLAPS(doc_path1, doc_path2)

对于您的查询,我创建了第二个数组,其中一个值为[1],即星期日。这将比较所有记录,并返回0和1。在星期日工作的卖家的查询结果将返回1。为消除返回1的非必需记录,我添加了 WHERE 子句。这是查询:

SELECT * FROM table_name 
WHERE JSON_OVERLAPS(Seller_Non_Working_Day , '[1]') != 1 ;

还有另一个功能 JSON_CONTAINS ,该功能将列出所有包含特定值的记录,例如[1]在JSON数组中的任何位置。 JSON_CONTAINS的语法为

JSON_CONTAINS(target, candidate[, path])

target is a specific field. Here it would be Seller_Non_Working_Day
candidate is a specific value to find. Here it would be [1]
Path is any specific array location which is optional.

一个人可以使用以下查询来获取所有在周日工作的卖家。

SELECT * FROM table_name 
WHERE JSON_CONTAINS(Seller_Non_Working_Day , '[1]');