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

Posted

技术标签:

【中文标题】SQL替换字符串中的多个不同字符【英文标题】:SQL Replace multiple different characters in string 【发布时间】:2017-01-06 22:50:28 【问题描述】:

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

我目前有:

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

但是如何将多个值放入?

非常感谢!

【问题讨论】:

使用另一个REPLACE:REPLACE(REPLACE(T2.[ShipToCode],'&','and'),',','') 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

在此示例中,de 管道、加号、逗号和减号均被下划线替换。 您可以使用自己的角色更改每个角色。 所以在下一个例子中,加号和减号被一个散列代替。

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

但是,TRANSLATE 只能从 SQL Server 2017 开始使用。 为什么不直接翻译成空格呢? @Ludovic 因为如果您尝试“TRANSLATE 内置函数的第二个和第三个参数必须包含相同数量的字符”,SQL 会吐出此错误。 是否有性能增益/损失取决于您在单行上使用替换的次数,或单次替换和翻译?【参考方案4】:

我们使用了一个函数来执行类似的遍历字符串的操作,但这主要是为了删除不在“@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

【讨论】:

更喜欢这个解决方案,因为它不会菊花链几十个REPLACE调用【参考方案5】:

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

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

【讨论】:

很有道理。谢谢。 这太糟糕了,应该允许逗号列表或其他东西,REPLACE(REPLACE(REPLACE 变旧

以上是关于SQL替换字符串中的多个不同字符的主要内容,如果未能解决你的问题,请参考以下文章

Java一次替换字符串中的多个不同子字符串(或以最有效的方式)

sql 替换指定字符串

sql可以替换模糊匹配字符串吗

javascript中的replace函数同时替换多个字符串

sql 替换指定字符串

sql 替换 两特定字符(含特定字符)之间的字段