我目前有这张桌子
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]')
可以协助吗?
答案 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]');