当前位置:  开发笔记 > 数据库 > 正文

在SQL查询中执行正则表达式(替换)

如何解决《在SQL查询中执行正则表达式(替换)》经验,为你挑选了3个好方法。

<在给定的数据库列中替换所有'<'的最佳方法是什么?基本上执行s/<[^;]/</gi

笔记:

必须在MS SQL Server 2000中工作

必须是可重复的(而不是最终<;;;;;;;;;)

Jorge Ferrei.. 16

需要一些黑客攻击,但我们可以使用LIKE,PATINDEX,LEFTRIGHT以及良好的旧字符串连接来完成此操作.

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版本无关的,应该工作得很好.



1> Jorge Ferrei..:

需要一些黑客攻击,但我们可以使用LIKE,PATINDEX,LEFTRIGHT以及良好的旧字符串连接来完成此操作.

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版本无关的,应该工作得很好.



2> leoinfo..:

我认为如果你使用不同的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



3> ilitirit..:

怎么样:

    UPDATE tableName
    SET columName = REPLACE(columName , '<', '<')
    WHERE columnName LIKE '%lt%'
    AND columnName NOT LIKE '%lt;%'

编辑:

我刚刚意识到这会忽略具有部分正确<字符串的列.

在这种情况下,您可以忽略where子句的第二部分,然后调用它:

    UPDATE tableName
    SET columName = REPLACE(columName , '<;', '<')

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有