sql >> Databasteknik >  >> RDS >> Mysql

MySQL och JSON - omvandla array till rader

Här är tre sätt att konvertera din array till rader. Använder samma antagna JSON-värde:

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

Använder in-line tabell med siffror. MySQL och MariaDB-kompatibla:

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;

Använder MySQL 8.0.4+ JSON_TABLE():

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

Använda MariaDB SEQUENCE Engine för att bli av med in-line sekvenstabell:

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

För att göra mer generiskt i MariaDB, använd en "bästa gissning" max för arraylängden och begränsa sedan sekvensen till JSON-längden. Det här exemplet antar att den största arrayen kommer att ha 1024 eller färre element:

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



  1. Betydelse av n:m och 1:n i databasdesign

  2. Vackra block av pannplåt

  3. Lägg till List<int> till en mysql-parameter

  4. MySQL &MariaDB Lastbalansering med ProxySQL