Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL e JSON:trasforma l'array in righe

Ecco tre modi per convertire l'array in righe. Utilizzando lo stesso valore JSON presunto:

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

Usando la tabella dei numeri in linea. Compatibile con MySQL e 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;

Utilizzo di MySQL 8.0.4+ JSON_TABLE():

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

Utilizzo di MariaDB SEQUENCE Engine per eliminare la tabella delle sequenze in linea:

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

Per rendere più generico in MariaDB, utilizzare un massimo di "ipotesi migliore" per la lunghezza dell'array, quindi limitare la sequenza alla lunghezza JSON. Questo esempio presuppone che l'array più grande contenga 1024 elementi o meno:

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