mysql - 如何从json字段获取值

标签 mysql sql

我有一个如下所示的表格:

CREATE TABLE `testtable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

json 字段的数据如下所示:

{'a1': 'Title', 'b17': 'Message'}

我想选择 id 和 a1(json)。我不想要b17。有办法做到这一点吗?

最佳答案

如果您使用 MySQL 5.7.8 或更高版本,您可以利用那里支持的 JSON 数据类型:

https://dev.mysql.com/doc/refman/5.7/en/json.html

然后,您可以使用 JSON 路径表达式从字段中提取值。

否则,您要么只能通过 SUBSTR() 和 POSITION() 函数提取值(下面是做作的示例),假设值的格式足够可预测,要么在 SQL 之外处理结果。

SELECT id, SUBSTR(hackedJSON, 1, POSITION("'" IN hackedJSON) - 1) a1
  FROM (
        SELECT id, SUBSTR(data, POSITION("'a1':" IN data) + 7) hackedJSON
          FROM testtable) a

关于mysql - 如何从json字段获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34190843/

相关文章:

mysql - 在更改 MySQL 列类型之前进行测试

mysql - 如何使用动态Where子句编写查询

mysql - 如何在MySQL中选择两个具有相同类别的随机行

sql - 如何在 SQL 中将字符串排序为数字?

sql - 如何停止 Sql Server 的用户实例? (Sql Express 用户实例数据库文件被锁定,即使在停止 Sql Express 服务后)

sql - 如何比较同一张表中的两列?

java - Java 中的 ExecuteUpdate sql 语句不起作用

mysql - 获取最接近的小于值

sql - Azure sql 数据同步代理 2 无法安装

mysql - 如何在子查询中使用 WHERE IN 和字符串列中的值?