Извлечение первого ключа JSON извлечение в MySQL - PullRequest
0 голосов
/ 03 марта 2020

Это столбцы и значения моей таблицы:

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

Довольно застрял.

1 Ответ

3 голосов
/ 03 марта 2020

Ответ зависит от типа данных, который вы используете для столбца.

Если вы используете тип данных 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"

Если ключи на самом деле всегда числовые, вы можете затем вернуться к целым числам

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)

EG

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

Если вы используете версию MySQL, которая не поддерживает JSON, вы можете использовать комбинацию SUBSTRING, POSITION и других строковых функций

...