Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да конвертирате MySQL JSON масив в низ, разделен със запетая

Мисля, че това е най-единственият чист начин на MySQL, поне за версии на MySQL под 8

Запитване

SET SESSION group_concat_max_len =@@max_allowed_packet;SELECT GROUP_CONCAT( JSON_UNQUOTE( JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']')) ) @ row FROM ( SELECT @ред + 1 КАТО номер ОТ ( 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 ) КАТО number_generator CROSS JOIN (SELECT json( ASrecordsLENGTH). json_array_length ОТ ( ИЗБЕРЕТЕ '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' КАТО json ОТ ДВОЙНИ записи ) КАТО ) AS записва КЪДЕ число МЕЖДУ 0 И json_array_length - 1  

Резултат

<предварителен код>| GROUP_CONCAT( JSON_UNQUOTE( JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number, ']')) )) || -------------------------------------------------- -------------------------------------------------- --------------------- || +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |

вижте демо

Имам, не предполагам, че всички вече са на MySQL 8, но го добавих и за пълнота.

Само заявка за MySQL 8.0

ЗАДАДЕТЕ СЕСИЯ group_concat_max_len =@@max_allowed_packet;ИЗБЕРЕТЕ GROUP_CONCAT(item)FROM JSON_TABLE( '["+63(02)3647766", "+63(02)5467329", "+63(052)25" , "+63(02)3642403"]' , "$[*]" КОЛОНИ ( rowid ЗА ОРДИНАЛНОСТ , елемент VARCHAR(100) ПЪТ "$" )) КАТО json_parsed  

Резултат

<предварителен код>| GROUP_CONCAT(елемент) || -------------------------------------------------- --------- || +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |

вижте демо

REPLACE() методът на влагане е по-разхвърлян, но трябва да работи на всички версии на MySQL.

ИЗБЕРЕТЕ ЗАМЕНИ( ЗАМЕНИ( ЗАМЕНИ( '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403" ]' , '[' , '' ) , ']' , '' ) , '"' , '' ) 

Резултат

<предварителен код>| ЗАМЕНИ( ЗАМЕНИ( ЗАМЕНИ( '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]', '[' , '' ) , ']' , '' ) , '"' , '' ) || ---------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------- || +63(02)3647766, +63(02)5467329, +63(02)8555522, +63(02)3642403 |

вижте демо



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете лявата или дясната част от низ в MySQL

  2. Съкратете всички таблици в базата данни на MySQL, които съответстват на модел на име

  3. Намерете най-близката географска ширина/дължина с SQL заявка

  4. най-добрият начин да промените формата на датата в mysql SELECT?

  5. Поле за дата и час на Django - преобразувайте в часова зона в изглед