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

5

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

就像这样:

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

当我查询这个表时,我希望将多个竖线替换为单个竖线,以使结果像这样:

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

无法通过REPLACE函数解决问题,有人知道如何解决吗?
2个回答

10

vkp的方法绝对可以解决您的问题。另一种行之有效的方法,也适用于各种其他情况,是使用三个REPLACE()函数。

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

这种方法可以让您在多个字符串之间保留分隔符,而 Mr. VPK 的方法会将字符串合并,并在开头和结尾加上分隔符。

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

这个真是太棒了 :) - vacip
1
@dfundako 这个更加通用,被标记为解决方案。 - Avi
我喜欢这个使用了一个在你的序列化字符串中不应该存在的字符序列,如果你真的在处理这些字面值,它应该在几乎所有情况下进行编码,并且永远不会出现"<tag>" - Chris Marisic

8

一种方法是将所有的|替换为空格,并在字符串开头和结尾添加一个管道符。

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

谢谢,这解决了我的问题,但是@dfundako的解决方案更加通用。 - Avi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接