Ето три начина да конвертирате вашия масив в редове. Използване на същата предполагаема стойност на JSON:
SET @j = '[10, 20, {"a": "bbb"}]';
Използване на вградена таблица с числа. Съвместим с MySQL и MariaDB:
WITH sequenceGenerator (sequenceNumber) AS (
SELECT 0 AS sequenceNumber
UNION ALL
SELECT 1
UNION ALL
SELECT 2
)
SELECT
JSON_EXTRACT(@j, CONCAT('$[', sequenceNumber, ']')) AS arrayValue
FROM
sequenceGenerator;
Използване на MySQL 8.0.4+ JSON_TABLE():
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
Използване на MariaDB SEQUENCE Engine, за да се отървете от вградената таблица с последователности:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
За да направите по-общ в MariaDB, използвайте максималната "най-добра предположение" за дължината на масива, след което ограничете последователността до дължината на JSON. Този пример предполага, че най-големият масив ще има 1024 или по-малко елемента:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);