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一次替换字符串中的多个不同子字符串(或以最有效的方式)