1

这些是我的表的列和值:

ID | RULE
123 | {"buy":{"10000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":4.05}}
445 | {"buy":{"11000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":2.25}}

我的预期输出:

ID | ArticleInfo
123 | 10000
445 | 11000

很卡。

4

1 回答 1

4

答案取决于您用于列的数据类型。

如果您使用的是 JSON 数据类型,那么您可以使用 JSON_EXTRACT 和 JSON_KEYS 的组合来提取密钥

例如,如果您运行

SELECT ID, JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(RULE, '$.buy')),"$[0]") AS ArticleInfo FROM test;

它会回来

ID | ArticleInfo
123 | "10000"
445 | "11000"

如果键实际上总是数字,则可以通过将它们乘以 1 将它们转换为整数。

SELECT ID, (JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(RULE, '$.buy')),"$[0]") * 1) AS ArticleInfo FROM test;
ID | ArticleInfo
123 | 10000
445 | 11000

如果它是 CHAR/VARCHAR/TEXT 那么您可以使用与上述相同的方法,但首先将 varchar 转换为 JSON 使用CAST(RULE AS JSON)

例如

SELECT id, 
(JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(CAST(rule AS JSON), '$.buy')),"$[0]")* 1)
FROM test;

如果您使用的 MySQL 版本不支持 JSON,那么您可以使用 SUBSTRING、POSITION 和其他字符串函数的组合

于 2020-03-03T14:27:44.763 回答