Сначала вы заменяете старый хост новым хостом, а затем выполняете вторую замену, чтобы установить новый префикс размера.
Используйте функцию position
, чтобы найти позиции "{" и "}" и построить строки "s: 91:" и "s: 94:", чтобы заменить их.
update MYTABLE set
PARAMS = replace(replace(PARAMS, 'SOMEHOST', 'SOMENEWHOST'),
's:' || cast(position('}' in PARAMS) - position('{' in PARAMS) + 1 as varchar(16)) || ':',
's:' || cast(position('}' in replace(PARAMS, 'SOMEHOST', 'SOMENEWHOST')) - position('{' in PARAMS) + 1 as varchar(16)) || ':')
PS: было бы намного безопаснее, если бы при замене хоста вы также включили идентификатор. Поэтому, если случайно имя хоста является частью пароля или папки, они не будут изменены, что приведет к повреждению этих значений.
replace (PARAMS, '"server": "SOMEHOST"' , '"server": "SOMENEWHOST"')
вместо
replace (PARAMS, 'SOMEHOST', 'SOMENEWHOST')
Это делает этот результат запроса:
update MYTABLE set
PARAMS = replace(replace(PARAMS, '"server":"SOMEHOST"', '"server":"SOMENEWHOST"'),
's:' || cast(position('}' in PARAMS) - position('{' in PARAMS) + 1 as varchar(16)) || ':',
's:' || cast(position('}' in replace(PARAMS, '"server":"SOMEHOST"', '"server":"SOMENEWHOST"')) - position('{' in PARAMS) + 1 as varchar(16)) || ':')