【问题标题】:JSON_VALUE not working in old version. is there any other way in SQL to get a value from a JSONJSON_VALUE 在旧版本中不起作用。 SQL中有没有其他方法可以从JSON中获取值
【发布时间】:2021-04-21 01:48:01
【问题描述】:

所以我遇到的主要问题是我真的需要从另一个 JSON 格式的表中获取一个值,显然我认为,只需使用 JSON_VALUE 来获取我想要的属性......当我出现问题时在阿多尼斯创造的迁移,和惊喜。运行迁移后,我意识到我不能使用 JSON_VALUE 因为阿多尼斯服务器的版本。还有其他方法可以获得价值吗?

【问题讨论】:

  • 你不能升级你服务器上的 MySQL 安装吗?
  • 将整个 JSON 文档提取到您的应用程序中,将其解组为一个结构,然后选择您想要的值。你会后悔任何其他解决方案。我建议你升级你的 MySQL 版本。如果您使用的是 MySQL 5.6 或更早版本,it's already past its end of life.
  • @BillKarwin 如果您使用的是 MySQL 5.6 或更早版本 JSON_VALUE() 是在 8.0.21 中引入的。
  • 还有其他方法可以获取值吗? 有很多字符串函数,足以解决您的任务。我建议创建通用的用户定义函数,但当然,在每种单独的情况下,您都可以构建单独的特定表达式。在任何情况下都必须在查询中应用转换为所需的输出数据类型(ex-或implicit) - 函数不能具有可更改的输出数据类型。
  • 啊,对,我正在考虑 5.7 中的其他函数,例如 JSON_SEARCH()。

标签: mysql adonis.js


【解决方案1】:

嗯,这比我预期的要容易。我可以,因为我想在 JSON 中搜索一个字符串,这就像使用 LIKE 一样简单。示例

user.settings 是一个 JSON,不太像: '{"平台" : "windows"}'

UPDATE order
      SET order.platform = (
        SELECT
          CASE 
            WHEN users.settings LIKE '%mac%' THEN 'mac'
            WHEN users.settings LIKE '%windows%' THEN 'windows'
            ELSE NULL
          END
        FROM users
        WHERE users.id = orders.user_id
      )

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多