<
在给定的数据库列中替换所有'<'的最佳方法是什么?基本上执行s/<[^;]/</gi
笔记:
必须在MS SQL Server 2000中工作
必须是可重复的(而不是最终<;;;;;;;;;
)
Jorge Ferrei.. 16
需要一些黑客攻击,但我们可以使用LIKE,PATINDEX,LEFT和RIGHT以及良好的旧字符串连接来完成此操作.
create table test ( id int identity(1, 1) not null, val varchar(25) not null ) insert into test values ('< <- ok, < <- nok') while 1 = 1 begin update test set val = left(val, patindex('%<[^;]%', val) - 1) + '<' + right(val, len(val) - patindex('%<[^;]%', val) - 2) from test where val like '%<[^;]%' IF @@ROWCOUNT = 0 BREAK end select * from test
更好的是,这是SQL Server版本无关的,应该工作得很好.
需要一些黑客攻击,但我们可以使用LIKE,PATINDEX,LEFT和RIGHT以及良好的旧字符串连接来完成此操作.
create table test ( id int identity(1, 1) not null, val varchar(25) not null ) insert into test values ('< <- ok, < <- nok') while 1 = 1 begin update test set val = left(val, patindex('%<[^;]%', val) - 1) + '<' + right(val, len(val) - patindex('%<[^;]%', val) - 2) from test where val like '%<[^;]%' IF @@ROWCOUNT = 0 BREAK end select * from test
更好的是,这是SQL Server版本无关的,应该工作得很好.
我认为如果你使用不同的STUFF,这可以做得更干净:)
create table test ( id int identity(1, 1) not null, val varchar(25) not null ) insert into test values ('< <- ok, < <- nok') WHILE 1 = 1 BEGIN UPDATE test SET val = STUFF( val , PATINDEX('%<[^;]%', val) + 3 , 0 , ';' ) FROM test WHERE val LIKE '%<[^;]%' IF @@ROWCOUNT = 0 BREAK END select * from test
怎么样:
UPDATE tableName SET columName = REPLACE(columName , '<', '<') WHERE columnName LIKE '%lt%' AND columnName NOT LIKE '%lt;%'
编辑:
我刚刚意识到这会忽略具有部分正确<
字符串的列.
在这种情况下,您可以忽略where子句的第二部分,然后调用它:
UPDATE tableName SET columName = REPLACE(columName , '<;', '<')