【问题标题】:Can't search values in a json column when it contains a key value object in MySQL 8.0当它包含 MySQL 8.0 中的键值对象时,无法在 json 列中搜索值
【发布时间】:2021-09-17 09:14:55
【问题描述】:

我在 MYSQL 8 的 JSON 列中搜索值时遇到问题。

目标是选择至少一个市场的值为真的所有记录,请参阅下面的列值可能的示例。

{"at": false, "au": false, "be": false, "ch": false, "cz": false, "de": false, "dk": false, "es": false, "eu": false, "fi": false, "fr": false, "gl": false, "hk": false, "it": false, "jp": false, "kr": false, "nl": false, "no": false, "se": false, "uk": true, "us": false}

我们尝试过使用 JSON_CONTAINS 和 JSON_SEARCH,但结果为 0(无法包含我们尝试过的所有查询,因为我们没有保存它们)。似乎也找不到任何尝试使用类似结构化的对象/查询来执行此操作的人。在 MySQL 中是否可以进行此查询?

我们希望的原始查询可以工作:

SELECT *
FROM
    `redirects`
WHERE
    JSON_CONTAINS(`synced_markets`, 'true')

更新

我们设法破解了它,因为我们只关心通过将其转换为字符是否至少有一个是真的,但感觉这不是一个合适的解决方案。

WHERE CAST(`synced_markets` AS CHAR) LIKE '%true%'

【问题讨论】:

    标签: mysql mysql-8.0


    【解决方案1】:

    我认为您误解了JSON_CONTAINS 函数。它检查 json 字符串作为第一个参数是否包含 key-value 作为第二个参数。不仅仅是值。正确的用法如下:

    SELECT JSON_CONTAINS('{"a": true, "b": false}', '{"a":true}');
    

    命令返回1

    阅读手册了解更多信息:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html

    也许您可以将列值视为字符串。只是

    SELECT *
    FROM
        `redirects`
    WHERE
        `synced_markets` like '%true%'
    

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2019-10-19
      • 2020-01-17
      • 2017-01-16
      • 2023-02-24
      相关资源
      最近更新 更多