我有一个看起来像这样的表:
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。有没有办法做到这一点?
答案 0 :(得分:0)
如果您使用的是MySQL 5.7.8或更高版本,则可以利用其中支持的JSON数据类型:
https://dev.mysql.com/doc/refman/5.7/en/json.html
然后,您可以使用JSON Path表达式从字段中提取值。
否则,您无法通过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