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

Прочетете JSON масив в MYSQL

mysql> SET @`json` :=
    -> '[
    '>    {
    '>      "id": 1, "type": 2
    '>    },
    '>    {
    '>      "id": 2, "type": 1
    '>    }
    '> ]';
Query OK, 0 rows affected (0.00 sec)

Можете да получите всички ids в масив:

mysql> SELECT JSON_EXTRACT(@`json` ,'$[*].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[*].id') |
+----------------------------------+
| [1, 2]                           |
+----------------------------------+
1 row in set (0.00 sec)

Има достъп до всеки JSON id :

mysql> SELECT JSON_EXTRACT(@`json` ,'$[0].id');
+----------------------------------+
| JSON_EXTRACT(@`json` ,'$[0].id') |
+----------------------------------+
| 1                                |
+----------------------------------+
1 row in set (0.00 sec)

Опитайте:

mysql> DROP PROCEDURE IF EXISTS `new_procedure`;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //

mysql> CREATE PROCEDURE `new_procedure`(`json` JSON)
    -> BEGIN
    ->   DECLARE `json_items` BIGINT UNSIGNED DEFAULT JSON_LENGTH(`json`);
    ->   DECLARE `_index` BIGINT UNSIGNED DEFAULT 0;
    -> 
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> 
    ->   CREATE TEMPORARY TABLE IF NOT EXISTS `jsonTemporary`
    ->     (`id` BIGINT UNSIGNED NOT NULL);
    -> 
    ->   WHILE `_index` < `json_items` DO
    ->     INSERT INTO `jsonTemporary` (`id`)
    ->     VALUES (JSON_EXTRACT(`json`, CONCAT('$[', `_index`, '].id')));
    ->     SET `_index` := `_index` + 1;
    ->   END WHILE;
    -> 
    ->   SELECT `id` FROM `jsonTemporary`;
    ->   DROP TEMPORARY TABLE IF EXISTS `jsonTemporary`;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `new_procedure`(@`json`);
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Вижте db-fiddle .




  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 workbench

  2. SQLSTATE[23000]:Нарушение на ограничението за интегритет:1452 Не може да се добави или актуализира дъщерен ред:ограничение на външния ключ е неуспешно

  3. Защо съпоставянето по подразбиране на MySQL е latin1_swedish_ci?

  4. Как да заключите един ред

  5. Най-добрият начин да получите първия и последния ден от миналия месец?