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

cob*_*ski 14 sql replace sql-server-2016

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

我目前有:

REPLACE(T2.[ShipToCode],'&','and')
Run Code Online (Sandbox Code Playgroud)

但是你如何将多个值放入?

非常感谢!

Siy*_*ual 20

你只需要菊花链它们:

REPLACE(REPLACE(T2.[ShipToCode], '&', 'and'), ',', '')
Run Code Online (Sandbox Code Playgroud)

  • 但这太糟糕了,应该允许逗号列表或其他东西,REPLACE(REPLACE(REPLACE 变旧 (3认同)

小智 11

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

SELECT Title,
REPLACE(
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(RTRIM(Title),
                            ' & ',''),
                        '++', ''),
                    '/', '-'),
                '(',''),
            ')',''),
        '.',''),
    ',',''),
' ', '-')
AS Title_SEO
FROM TitleTable
Run Code Online (Sandbox Code Playgroud)


Riv*_*nni 10

如果您使用 SQL Server 2017 或 2019,则可以使用TRANSLATE函数。

TRANSLATE(ShipToCode, '|+,-', '____')
Run Code Online (Sandbox Code Playgroud)

在此示例中,管道、加号、逗号和减号全部替换为下划线。您可以用自己的角色来改变每个角色。因此,在下一个示例中,加号和减号被哈希替换。

TRANSLATE(ShipToCode, '|+,-', '_#_#')
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ott 6

我们使用一个函数做类似的循环字符串,但这主要是为了删除不在"@ValidCharacters"字符串中的字符.这对于删除我们不想要的任何内容非常有用 - 通常是非字母数字字符,但我认为我们在该字符串中也有空格,引号,单引号和少数其他字符.它真的被用来删除那些倾向于偷偷摸摸的非印刷字符,所以可能不适合你的情况,但可能会给你一些想法.

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
Run Code Online (Sandbox Code Playgroud)


CLa*_*rge 5

有一条评论提到“数十个替换调用” ...如果删除数十个单个字符,您还可以使用翻译和单个替换。

REPLACE(TRANSLATE(T2.[ShipToCode], '[];'',$@', '#######'), '#', '')
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接翻译成空白呢? (3认同)
  • 但是,仅从SQL Server 2017起可以使用TRANSLATE。 (2认同)