我有一个列audit_info
与JSON数据在表中:
{
"AddInfo":{
"UPN":"abc@abc.com",
"UserName":"abc@abc.com",
"TimeStamp":"2021-10-11T15:54:34:4805634Z",
"Source":"xyz"
},
"ChangeInfo":{
"UPN":"abc@abc.com",
"UserName":"abc@abc.com",
"TimeStamp":"2021-10-11T15:54:34:4832421Z",
"Source":"xyz"
}
}
我需要将秒小数点的时间戳从:4832421Z
更新为.4832421Z
有人能帮帮我吗?
update the_table
set audit_info=??
2条答案
按热度按时间n3h0vuf21#
原始问题:
如果在其他地方没有
{:}
,则可以使用replace:fiddle
更新问题:
在更高的Oracle版本中,如果要将路径
$.AddInfo.TimeStamp
和$.ChangeInfo.TimeStamp
中的最后一个:
更新为.
,则可以使用useJSON_TABLE
提取时间戳,然后使用简单的字符串函数提取最后一个:
之前和之后的组件,然后使用JSON_MERGEPATCH
更新特定路径:然后,对于样本数据,在
MERGE
之后,表格包含:| 审计信息|
| - ------|
| {"AddInfo":{"UPN":"abc@abc.com","UserName":"abc@abc.com","TimeStamp":"2021-10-11T15:54:34.4805634Z","Source":"xyz"},"ChangeInfo":{"UPN":"abc@abc.com","UserName":"abc@abc.com","TimeStamp":"2021-10-11T15:54:34.4832421Z","Source":"xyz"}} |
如果您不想担心特定的路径,那么您可以使用正则表达式来匹配时间戳:
fiddle
zkure5ic2#
尝试replace,将json字段替换为文本,然后再转换为json,应该是这样的:
update [表的名称] set审计信息= replace(审计信息::文本,“:”,.“”)::jsonb其中....