Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Aktualizacja MySQL lub zmiana nazwy klucza w JSON

Nie ma prostej funkcji JSON, która zrobiłaby to samo. Możemy użyć kombinacji niektórych funkcji JSON.

Usuniemy oldKey-oldValue sparuj przy użyciu Json_Remove( ) funkcji, a następnie Json_Insert() nowaKlucz-staraWartość parować.

Json_Extract() funkcja służy do pobierania wartości odpowiadającej kluczowi wejściowemu w dokumencie JSON.

UPDATE `my_table` 
SET `my_col` = JSON_INSERT(
                           JSON_REMOVE(my_col, '$.oldKeyValue'), 
                           '$.newKeyValue', 
                           JSON_EXTRACT(my_col, '$.oldKeyValue')
                          );

Demo

SET @my_col := '{"endDate": "2018-10-10", "startDate": "2017-09-05", "oldKeyValue": {"foo": 1000, "bar": 2000, "baz": 3000}, "anotherValue": 0}';

SET @new_col := JSON_INSERT(
                            JSON_REMOVE(@my_col, '$.oldKeyValue'), 
                            '$.newKeyValue',
                            JSON_EXTRACT(@my_col,'$.oldKeyValue')
                          );

SELECT @new_col;

Wynik

| @new_col                                                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------------- |
| {"endDate": "2018-10-10", "startDate": "2017-09-05", "newKeyValue": {"bar": 2000, "baz": 3000, "foo": 1000}, "anotherValue": 0} |

Jako alternatywa dla Json_Extract() , możemy również użyć -> operatora, aby uzyskać dostęp do wartości odpowiadającej danemu kluczowi w dokumencie JSON.

UPDATE `my_table` 
SET `my_col` = JSON_INSERT(
                           JSON_REMOVE(my_col, '$.oldKeyValue'), 
                           '$.newKeyValue', 
                           my_col->'$.oldKeyValue' 
                          );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktywacja konta php/mysql

  2. Wstaw MySQL do DATETIME:czy bezpiecznie jest używać formatu ISO::8601?

  3. Laravel Eloquent zapytanie JSON kolumna z Where In?

  4. Zapytanie MySQL z wieloma tabelami

  5. MySQL:daty sprzed 1970 r.