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

Sådan konverteres MySQL JSON-array til kommasepareret streng

Jeg tror, ​​at dette er den eneste MySQL-rene måde, i det mindste for MySQL-versioner under 8

Forespørgsel

SET SESSION group_concat_max_len = @@max_allowed_packet;

SELECT
  GROUP_CONCAT(
     JSON_UNQUOTE(
       JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']'))
     )
  )                    

FROM (

  SELECT 
   @row := @row + 1 AS number
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION   SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row1
  CROSS JOIN (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION  SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row2
  CROSS JOIN (
    SELECT @row := -1 
  ) init_user_params 
) AS number_generator
CROSS JOIN (


SELECT 
    json
  , JSON_LENGTH(records.json) AS json_array_length    
FROM (

  SELECT 
   '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' AS json
  FROM 
   DUAL  
) AS records

) AS records 
WHERE
    number BETWEEN 0 AND  json_array_length - 1 
 

Resultat

| GROUP_CONCAT( JSON_UNQUOTE( JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']')) ) ) | | -------------------------------------------------------------------------------------------------------------------------- | | +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |

se demo

Det har jeg, jeg antager ikke, at alle allerede er på MySQL 8, men jeg tilføjede det også for fuldstændighedens skyld.

Kun MySQL 8.0-forespørgsler

SET SESSION group_concat_max_len = @@max_allowed_packet;

SELECT 
 GROUP_CONCAT(item)
FROM JSON_TABLE(
     '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]'
   , "$[*]"

   COLUMNS (
       rowid FOR ORDINALITY
     , item VARCHAR(100) PATH "$"   
   )
) AS json_parsed  
 

Resultat

| GROUP_CONCAT(item) | | ----------------------------------------------------------- | | +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |

se demo

REPLACE() indlejringsmetoden er mere rodet, men burde virke på alle MySQL-versioner.

SELECT REPLACE( REPLACE( REPLACE( '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' , '[' , '' ) , ']' , '' ) , '"' , '' )

Resultat

| REPLACE( REPLACE( REPLACE( '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' , '[' , '' ) , ']' , '' ) , '"' , '' ) | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | +63(02)3647766, +63(02)5467329, +63(02)8555522, +63(02)3642403 |

se demo



  1. forsøger at få antallet af måneder

  2. Neo4j - Drop et indeks ved hjælp af Cypher

  3. Hvad er Drupals standard adgangskodekrypteringsmetode?

  4. Brug af LIMIT 1 i MySQL