Hier zijn drie manieren om uw array om te zetten in rijen. Dezelfde veronderstelde JSON-waarde gebruiken:
SET @j = '[10, 20, {"a": "bbb"}]';
In-line tabel met getallen gebruiken. MySQL en MariaDB compatibel:
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() gebruiken:
SELECT
arrayValue
FROM
JSON_TABLE(
@j,
'$[*]'
COLUMNS(
arrayValue JSON PATH '$')
) AS tt;
MariaDB SEQUENCE Engine gebruiken om de in-line sequentietabel te verwijderen:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_2;
Om meer generiek te maken in MariaDB, gebruikt u een "best guess" max voor de arraylengte en beperkt u vervolgens de reeks tot JSON-lengte. In dit voorbeeld wordt ervan uitgegaan dat de grootste array 1024 of minder elementen zal hebben:
SELECT
JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
seq_0_to_1024 AS sequenceTable
WHERE
sequenceTable.seq < JSON_LENGTH(@j);