alu*_*umb 17 regex sql sql-server sql-server-2000
<在给定的数据库列中替换所有'<'的最佳方法是什么?基本上执行s/<[^;]/</gi
笔记:
<;;;;;;;;;)Jor*_*ira 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
Run Code Online (Sandbox Code Playgroud)
更好的是,这是SQL Server版本无关的,应该工作得很好.
leo*_*nfo 10
我认为如果你使用不同的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
Run Code Online (Sandbox Code Playgroud)
怎么样:
UPDATE tableName
SET columName = REPLACE(columName , '<', '<')
WHERE columnName LIKE '%lt%'
AND columnName NOT LIKE '%lt;%'
Run Code Online (Sandbox Code Playgroud)
编辑:
我刚刚意识到这会忽略具有部分正确<字符串的列.
在这种情况下,您可以忽略where子句的第二部分,然后调用它:
UPDATE tableName
SET columName = REPLACE(columName , '<;', '<')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90031 次 |
| 最近记录: |