sql >> Database >  >> RDS >> Mysql

MySQL en JSON - transformeer array naar rijen

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);



  1. mysql oledb-stuurprogramma

  2. MySQL-vraag - Unieke sleutel Werkt niet correct of begrijp ik het verkeerd?

  3. SQL Server datetime LIKE selecteren?

  4. wat is de echte oorzaak van mysql-fout 1442?