假设我有一个json列作为JSON_COLUMN,其中我以下面的格式存储数据
表格结构:(仅限2列)
ID - Autoincrement
JSON_COLUMN - Varchar2(1000)
字符串
样本数据:
ID : 1
JSON_COLUMN :
[
{
"Name":"Number",
"Id":"PhoneNumber",
"Value":"+393123456789"
},
{
"Name":"Name",
"Id":"FirstName",
"Value":"John"
},
{
"Name":"City",
"Id":"CityID",
"Value":"NYC"
}
]
型
现在,我想更新mariadb的查询,它应该取代城市从纽约到卡利的值
update tablename set JSON_COLUMN =?* 不确定这里要保存什么where id = 1;
2条答案
按热度按时间eiee3dmh1#
这里有一个解决方案,它只更新数组中与键'Value'对应的'NYC'。
字符串
这在MySQL 8.0或更高版本中有效,但在MariaDB中无效,因为MariaDB不支持
update
之前的公共表表达式。演示:https://dbfiddle.uk/tN9Q9-Od
以下是MariaDB 10.6或更高版本的解决方案(不适用于旧版本):
型
演示:https://dbfiddle.uk/fKHp8BmZ
hgb9j2n62#
mysql和mariadb没有数据类型varchar 2,但oracle有。
使用简单的
REPLACE
可以帮助您。如果在json中只有一个NYC,这就足够了。
| ID| JSON_列|
| --|--|
| 1 |的 { “名称”:“编号”, “Id”:“电话号码”, 电话:+393123456789 }, { “名称”:“名称”, “Id”:“FirstName”, “价值”:“约翰” }, { “名称”:“城市”, “Id”:“CityID”, “Value”:“卡利” }]的一种|
fiddle
如果您知道索引,则可以使用JSON_REPLACE
| JSON_EXTRACT(JSON_COLUMN,'$[2]. Value ')|
| --|
| “卡利”|
fiddle的