Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL und JSON - Array in Zeilen umwandeln

Hier sind drei Möglichkeiten, Ihr Array in Zeilen umzuwandeln. Unter Verwendung desselben angenommenen JSON-Werts:

SET @j = '[10, 20, {"a": "bbb"}]';

Verwendung von Inline-Zahlentabellen. MySQL- und MariaDB-kompatibel:

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;

Verwendung von MySQL 8.0.4+ JSON_TABLE():

SELECT
    arrayValue
FROM
    JSON_TABLE(
        @j,
         '$[*]'
        COLUMNS(
            arrayValue JSON PATH '$')
    ) AS tt;

Verwendung der MariaDB SEQUENCE Engine, um die Inline-Sequenztabelle zu entfernen:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_2;

Um in MariaDB generischer zu werden, verwenden Sie ein Maximum für die Array-Länge, das am besten geschätzt wird, und begrenzen Sie die Sequenz dann auf die JSON-Länge. Dieses Beispiel geht davon aus, dass das größte Array 1024 oder weniger Elemente hat:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_1024 AS sequenceTable
WHERE
    sequenceTable.seq < JSON_LENGTH(@j);