将多个重复字符替换为一个

问题描述 投票:0回答:3

我有一个 varchar 列,每个字段包含一个单词,但单词前后有随机数量的管道字符。

类似这样的:

MyVarcharColumn
'|||Apple|||||'
'|||||Pear|||||'
'||Leaf|'

当我查询表时,我希望将多个管道替换为单个管道,因此结果将是这样的:

MyVarcharColumn
'|Apple|'
'|Pear|'
'|Leaf|'

不知道如何用 REPLACE 函数解决它,有人知道吗?

sql sql-server-2008 t-sql
3个回答
10
投票

vkp的方法绝对可以解决你的问题。另一种有效的方法,并且也适用于各种其他情况,是使用三元组

REPLACE()

SELECT REPLACE(REPLACE(REPLACE('|||Apple|||||', '|', '><'), '<>',''), '><','|')

此方法将允许您在多个字符串之间保留分隔符,其中 VPK 先生的方法将连接字符串并在开头和结尾放置分隔符。

SELECT REPLACE(REPLACE(REPLACE('|||Apple|||||Banana||||||||||', '|', '><'), '<>',''), '><','|')

8
投票

一种方法是将所有

|
替换为空格,并在字符串的开头和结尾添加管道字符。

select '|'+replace(mycolumn,'|','')+'|' from tablename

0
投票

使用 SQL 2017 及以上版本

DECLARE @Input NVARCHAR(MAX) = 'Some-string-with----------lots-of-duplicated-problem-chars'
DECLARE @CharToCompact NVARCHAR(1) = '-'
DECLARE @Result NVARCHAR(MAX)

SELECT @Result = STRING_AGG(value, @CharToCompact) 
FROM STRING_SPLIT(@Input, @CharToCompact) 
WHERE value <> ''

产品

一些带有大量重复问题字符的字符串

© www.soinside.com 2019 - 2024. All rights reserved.