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

MySQL og JSON - transformer array til rækker

Her er tre måder at konvertere dit array til rækker. Bruger den samme antagne JSON-værdi:

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

Brug af in-line taltabel. MySQL og 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;

Bruger MySQL 8.0.4+ JSON_TABLE():

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

Brug af MariaDB SEQUENCE Engine til at slippe af med in-line sekvenstabel:

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

For at gøre mere generisk i MariaDB, brug et "bedste gæt" max for array længden og begræns derefter sekvensen til JSON længde. Dette eksempel antager, at det største array vil have 1024 eller færre elementer:

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



  1. Sådan opretter du linket server MySQL

  2. Sundhedstjek på Exadata ved hjælp af Exachk Utility

  3. Hvordan kræver jeg et mysql-felt?

  4. Hvad sker der, hvis du ikke forpligter en transaktion til en database (f.eks. SQL Server)?