如果包含这些数据的列具有相同的长度,并且这些出现22, 26, 29,...
在字符串开头的相同位置。然后,对于 SQL Server,您可以使用REPLACE
, SUBSTRING
withCHARINDEX
来做到这一点:
DECLARE @s VARCHAR(50);
DECLARE @sub INT;
SET @s = 's:27:\"http://somedomain.com/\"';
SET @sub = CONVERT(INT, SUBSTRING(@s, CHARINDEX(':', @s) + 1, 2));
SELECT REPLACE(REPLACE(@s, 'somedomain', 'someOtherdomain'), @sub, @sub + 5);
所以s:number:\"http://somedomain.com/\"
会变成s:number + 5:\"http://someOtherdomain.com/\"
。
如果你想UPDATE
对该表运行,你可以这样写:
UPDATE @t
SET s = REPLACE(REPLACE(s, 'somedomain', 'someOtherdomain'),
CONVERT(INT, SUBSTRING(s, CHARINDEX(':', s) + 1, 2)),
CONVERT(INT, SUBSTRING(s, CHARINDEX(':', s) + 1, 2)) + 5);
这个查询的作用是,它搜索出现的somedomain
并将其替换为someOtherdomain
,获取前两个之间的数字:
,将其转换为INT
并替换为相同的数字 + 5
。以下是运行上一个查询后数据的外观:
s:27:\"http://someOtherdomain.com/\"
s:31:\"http://someOtherdomain.com/abc/\"
s:34:\"http://someOtherdomain.com/abcdef/\"