SQL删除两个字符之间的字符串

kun*_*el1 5 sql t-sql sql-server sql-server-2005

我有一个这样的字符串:

`a|b^c|d|e^f|g`
Run Code Online (Sandbox Code Playgroud)

我想保持管道分隔,但删除胡萝卜子分隔,只保留该子分隔符的第一个值.

输出结果将是:

`a|b|d|e|g`
Run Code Online (Sandbox Code Playgroud)

有没有办法用简单的SQL函数做到这一点?

Zoh*_*led 3

另一种选择,使用CHARINDEX,REPLACESUBSTRING

DECLARE @OriginalString varchar(50) = 'a|b^c^d^e|f|g'

DECLARE @MyString varchar(50) = @OriginalString 

WHILE CHARINDEX('^', @MyString) > 0 
BEGIN
    SELECT @MyString = REPLACE(@MyString, 
                               SUBSTRING(@MyString, 
                                         CHARINDEX('^', @MyString), 
                                         CASE WHEN CHARINDEX('|', @MyString, CHARINDEX('^', @MyString)) > 0 THEN
                                            CHARINDEX('|', @MyString, CHARINDEX('^', @MyString)) - CHARINDEX('^', @MyString)
                                         ELSE
                                            LEN(@MyString)
                                         END
                                         )
                       , '')
END

SELECT @OriginalString As Original, @MyString As Final
Run Code Online (Sandbox Code Playgroud)

输出:

Original              Final
a|b^c^d^e|f|g         a|b|f|g
Run Code Online (Sandbox Code Playgroud)

  • @shawnt00“我怀疑声誉常常会影响操作员”:呃,是的;-)。好吧,一般选民。这是在用户个人资料页面以外的任何地方列出代表的主要缺点之一。它使得获得隐性信任变得太容易了,有时选民甚至懒得在投票前检查答案(尽管我并不是暗示这个答案不应该获得任何选票,我只是指出我认为的一种行为)已经注意到)。 (2认同)