在SQL查询中执行正则表达式(替换)(Perform regex (replace) in an S

2019-07-20 14:23发布

什么是更换所有“&LT”的最好办法< 在给定的数据库列? 基本上执行s/&lt[^;]/</gi

笔记:

  • 必须上班的MS SQL Server 2000
  • 必须是可重复(并且不与最终<;;;;;;;;;

Answer 1:

有些黑客必需的,但我们可以用LIKE,PATINDEX, 和良好的老字符串连接做到这一点。

create table test
(
    id int identity(1, 1) not null,
    val varchar(25) not null
)

insert into test values ('&lt; <- ok, &lt <- nok')

while 1 = 1
begin
    update test
        set val = left(val, patindex('%&lt[^;]%', val) - 1) +
                      '&lt;' +
                      right(val, len(val) - patindex('%&lt[^;]%', val) - 2)
    from test
    where val like '%&lt[^;]%'

    IF @@ROWCOUNT = 0 BREAK
end

select * from test

更好的是,这是SQL Server版本无关,应该只是罚款。



Answer 2:

我认为这是可以做到,如果你使用不同的STUFF干净多了:)

create table test
(
    id int identity(1, 1) not null,
    val varchar(25) not null
)

insert into test values ('&lt; <- ok, &lt <- nok')

WHILE 1 = 1
BEGIN
    UPDATE test SET
        val = STUFF( val , PATINDEX('%&lt[^;]%', val) + 3 , 0 , ';' )
    FROM test
    WHERE val LIKE '%&lt[^;]%'

    IF @@ROWCOUNT = 0 BREAK
END

select * from test


Answer 3:

怎么样:

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

编辑:

我才意识到这会忽略与部分正确列&lt; 字符串。

在这种情况下,你可以忽略where子句的第二部分和后来称之为:

    UPDATE tableName
    SET columName = REPLACE(columName , '&lt;;', '&lt;')


Answer 4:

本文介绍如何创建一个简单的正则表达式替换,你可以在SQL 2000(和2005年通过简单的调整)的使用,可以帮助你的功能。



Answer 5:

如果MSSQL的正则表达式的味道支持负先行,这将是正确的方式来处理这一点。

s/&lt(?!;)/&lt;/gi

将捕获&LT其后面没有的所有实例; (即使他们后面什么都没有,这[^;]将错过),并没有捕捉到以下非; 字符作为比赛的一部分,消除了对人物的原题的评论中提到的问题被丢在了更换。

不幸的是,我不使用MSSQL,所以我不知道它是否支持负超前或不...



Answer 6:

非常具体的这种模式,但我在过去做过类似这样:

REPLACE(REPLACE(columName, '&lt;', '&lt'), '&lt', '&lt;')

更广泛的例子(其可以在一个TITLE属性是不适当的编码字符)

REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    columName
    -- Remove existing encoding:
    , '&amp;', '&')
    , '&#34;', '"')
    , '&#39;', '''')
    -- Reinstate/Encode:
    , '&', '&amp;')
    -- Encode:
    , '"', '&#34;')
    , '''', '&#39;')
    , ' ', '%20')
    , '<', '%3C')
    , '>', '%3E')
    , '/', '%2F')
    , '\', '%5C')


文章来源: Perform regex (replace) in an SQL query