sql >> Databasteknik >  >> RDS >> Mysql

MySQL-uppdatering eller byt namn på en nyckel i JSON

Det finns ingen enkel JSON-funktion för att göra detsamma. Vi kan använda en kombination av vissa JSON-funktioner.

Vi tar bort oldKey-oldValue koppla ihop med Json_Remove( ) funktion och sedan Json_Insert() newKey-oldValue par.

Json_Extract() funktionen används för att hämta värde som motsvarar en inmatningsnyckel i JSON-dokumentet.

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;

Resultat

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

Som ett alternativ till Json_Extract() , kan vi också använda -> operatör för att komma åt värdet som motsvarar en given nyckel i JSON-dokumentet.

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


  1. Varför används inga nycklar i denna EXPLAIN?

  2. Hur man söker efter ett kommaseparerat värde

  3. Hitta närmaste datetime till specificerad datetime i mysql-frågan

  4. Skapa MySQL View med UNION