提取 JSON 的第一个密钥 提取到 MySQL

Extracting first key of JSON extract in MySQL

这些是我的 table:

的列和值
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;

会return

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 那么您可以使用与上面相同的方法,但首先使用 CAST(RULE AS JSON)

将 varchar 转换为 JSON

E.G

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

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