提取 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 和其他字符串函数
这些是我的 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)
E.G
SELECT id,
(JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(CAST(rule AS JSON), '$.buy')),"$[0]")* 1)
FROM test;
如果您使用的 MySQL 版本不支持 JSON,那么您可以结合使用 SUBSTRING、POSITION 和其他字符串函数