如何在SQL中将&替换为&?

7

我的数据库表中有一些错误数据。我想将所有的&&&amp&amp替换为只有&

在Java中,它可以正常工作。如何在SQL中实现?

Java:

    String[] names = new String[] { "Ravi Suthar", 
                                    "Ravi & Suthar", 
                                    "Ravi & Suthar",
                                    "Ravi & Suthar",
                                    "Ravi & Suthar" };

    for (String name : names) {
        System.out.println(name.replaceAll("&[amp;]*", "&"));
    }

SQL:

UPDATE tablename SET columnname=REPLACE(columnname,'&[amp;]*','&');

你使用的是哪个版本的SQL? - Tim Biegeleisen
1
只是提醒一下:这种情况通常发生在某人不信任他的XML解析器并手动转义和号时。也许你可以从源头上解决这个问题! - ParkerHalo
列数据类型为varchar,我正在使用MS SQL Server 2008。 - 2787184
根据此贴文,MSSQL中不可能实现正则表达式模式的SQL替换函数。 - aksappy
@aksappy,是的。请看我的回答。 - HoneyBadger
你的正则表达式并没有达到你的意图。它匹配了&后面跟着任意数量的字符amp;。尝试使用(?:&(?:amp;)+) - jsheeran
3个回答

9
UPDATE tablename SET columnname=REPLACE(REPLACE(columnname,'&','&'), 'amp;', '');

这将首先用"&"替换"&",然后将所有的"amp;"替换为""(空字符串)。

3

尝试执行以下代码:

UPDATE Tablename
SET columnname = REPLACE(columnname, '&', '&')
WHERE columnname LIKE '%&%'

它将替换&为&,这是可以的,但将&&替换为&是不可以的。 - 2787184

1

以下 SQL 将会把 &&&& 或其序列替换为 &

UPDATE tablename
SET columnname = REPLACE(REPLACE(columnname, '&', '&'), 'amp;', '');

or

UPDATE tablename
SET columnname  = REPLACE(columnname , 'amp;', '')

1
正如我所说的那样。如果我的答案对您有用,您可以接受它。 - HoneyBadger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接