sql >> データベース >  >> RDS >> Mysql

MYSQLでJSON配列を読み取る

    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)
    

    各JSONidにアクセスできます :

    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. MariaDBで日時に議事録を追加する8つの方法

    2. ユーザー登録時にサブドメインを自動作成すると、新しいWebサイトが作成されますか、それともWebサイトの外観が表示されますか?

    3. PostgreSQLでのデータベースのインデックス作成

    4. IF条件を使用したMySQLUPDATE