MySQL JSON查找多个值



我有一个表,其中一列中有工作日作为JSON数据。我正在尝试查询获得结果,如果它有一个或多个与用户选择匹配的日期。

我的表:

CREATE TABLE test (id SERIAL, label VARCHAR(16), data VARCHAR(80));
INSERT INTO test VALUES
(null, 'test 1', '["Monday", "Tuesday", "Friday"]'),
(null, 'test 2', '["Thursday", "Friday"]'),
(null, 'test 3', '["Sunday", "Saturday", "Monday"]');
我查询:

SELECT * FROM test
WHERE JSON_UNQUOTE(JSON_EXTRACT(data, '$[*]')) IN ('Monday', 'Tuesday');

查询应该给我测试1和测试2作为结果。

这里是DB Fiddle。

您可以使用OR来做

SELECT * FROM test
where JSON_CONTAINS(data,'"Monday"')=1 or JSON_CONTAINS(data,'"Tuesday"')

演示工作

如果您不想使用OR,那么您可以尝试json-overlaps像下图:

SELECT * FROM test WHERE 
JSON_OVERLAPS(data,'["Monday","Tuesday"]')=1

但是要注意它只支持MySQL 8.0.17

最新更新