【问题标题】:MySQL JSON find multiple valuesMySQL JSON 查找多个值
【发布时间】:2021-10-02 05:03:06
【问题描述】:

我有一张表格,在一列中我有工作日作为 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

【问题讨论】:

    标签: mysql arrays json


    【解决方案1】:

    你可以使用OR来做

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

    Working demo

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

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

    但要注意它只支持从 MySQL 8.0.17 开始

    【讨论】:

    • 这些天数将由用户输入。这样我需要在查询中动态添加 OR。还有其他选择吗?
    • @Omer 你可以使用json-overlaps 来做到这一点
    • json-overlaps 只显示一个结果。 SELECT * FROM test WHERE JSON_CONTAINS(data,'["Monday","Tuesday"]')=1
    • 它不适用于 DB Fiddle - db-fiddle.com/f/fC48mHEM1nuLUZCTP8CLfs/45
    • @Omer 看我回答的最后一部分,但要注意它只支持从 MySQL 8.0.17 开始
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多