这些是我的表的列和值:
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
很卡。
这些是我的表的列和值:
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
很卡。
答案取决于您用于列的数据类型。
如果您使用的是 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 和其他字符串函数的组合