SQL 替换字符串中的多个不同字符

SQL Replace multiple different characters in string

我需要替换字符串中的多个字符。结果不能包含任何“&”或任何逗号。

我目前有:

REPLACE(T2.[ShipToCode],'&','and')

但是如何放入多个值呢?

非常感谢!

您只需以菊花链方式连接它们:

REPLACE(REPLACE(T2.[ShipToCode], '&', 'and'), ',', '')

我们使用一个函数来执行类似的循环遍历字符串的操作,尽管这主要是为了删除不在“@ValidCharacters”字符串中的字符。这对于删除我们不想要的任何内容很有用 - 通常是非字母数字字符,但我认为我们在该字符串中也有 space、引号、单引号和其他一些字符。它确实用于删除有时会潜入的非打印字符,因此可能不适合您的情况,但可能会给您一些想法。

CREATE FUNCTION [dbo].[ufn_RemoveInvalidCharacters]
 (@str VARCHAR(8000), @ValidCharacters VARCHAR(8000))
RETURNS VARCHAR(8000)
BEGIN
  WHILE PATINDEX('%[^' + @ValidCharacters + ']%',@str) > 0
   SET @str=REPLACE(@str, SUBSTRING(@str ,PATINDEX('%[^' + @ValidCharacters +
']%',@str), 1) ,'')
  RETURN @str
END

一条评论提到"dozens of replace calls"...如果删除几十个单个字符,您还可以使用翻译和单个替换。

REPLACE(TRANSLATE(T2.[ShipToCode], '[];'',$@', '#######'), '#', '')

如果您使用 SQL Server 2017 或 2019,您可以使用 TRANSLATE 功能。

TRANSLATE(ShipToCode, '|+,-', '____')

在这个例子中,de pipe, plus, comma en minus 都被下划线代替了。 您可以用自己的角色更改每个角色。 所以在下一个例子中,加号和减号被哈希替换。

TRANSLATE(ShipToCode, '|+,-', '_#_#')

只需确保两组中的字符数相同即可。

如果您需要精细控制,缩进格式化 REPLACE() 嵌套以提高可读性。

SELECT Title,
REPLACE(
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(RTRIM(Title),
                            ' & ',''),
                        '++', ''),
                    '/', '-'),
                '(',''),
            ')',''),
        '.',''),
    ',',''),
' ', '-')
AS Title_SEO
FROM TitleTable

希望这对大家有帮助

如果您想用空字符串替换字符串中的多个单词或字符(即要删除字符),请使用 regexp_replace() 而不是多个 replace() 子句。

SELECT REGEXP_REPLACE("Hello world!123SQL$@#$", "[^\w+ ]", "")

上面的查询会returnHello world123SQL

如果您想从字符串中删除多个单词,将应用相同的过程。

如果要从字符串 Hello World SQL 中删除 HelloWorld,则可以使用此查询。

SELECT REGEXP_REPLACE("Hello World SQL", "(Hello|World)", "")

这将 return SQL

通过这个过程,查询将不会显得多余,您也不必处理多个 replace() 子句。

结论

如果您想用空白字符串替换单词,请使用 REGEXP_REPLACE()

如果您想用其他词替换单词,例如将 & 替换为 and,则使用 replace()。如果有多个单词需要替换,使用多个嵌套replace().