加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server中的TrimEnd等效项

发布时间:2020-12-12 06:54:17 所属栏目:MsSql教程 来源:网络整理
导读:我有列(Numbers),其值如下: 1,2,31,3,1, 我想修剪字符串末尾的所有逗号,结果就是这样 1,3 我已经尝试过以下查询但是我们只能删除最后一个逗号 DECLARE @String as VARCHAR(50)SET @String='1,4,'SELECT CASE WHEN right(rtrim(@String),1) = ',' then substr
我有列(Numbers),其值如下:
1,2,3
1,3,1,

我想修剪字符串末尾的所有逗号,结果就是这样

1,3

我已经尝试过以下查询但是我们只能删除最后一个逗号

DECLARE @String as VARCHAR(50)
SET @String='1,4,'

SELECT CASE WHEN right(rtrim(@String),1) = ',' then substring(rtrim(@String),len(rtrim(@String))-1)
    ELSE @String 
    END AS TruncString

如何删除字符串末尾的所有逗号?

解决方法

你可以这样做:
LEFT(Numbers,LEN(Numbers) - (PATINDEX('%[^,]%',REVERSE(Numbers)) - 1))

这样做的前提是你首先使用REVERSE反转字符串:

REVERSE(Numbers) -->,1

然后,您使用PATINDEX找到第一个不是逗号的字符的位置,并且模式匹配[^,]:

PATINDEX('%[^,REVERSE(Numbers)) -->,1 = 7

然后你可以使用LEN的字符串长度来获得反向位置,即如果反向字符串中第一个不是逗号的字符的位置是7,并且字符串的长度是10,那么你需要字符串的前4个字符.然后使用SUBSTRING提取相关部分

一个完整的例子就是

SELECT  Numbers,Reversed = REVERSE(Numbers),Position = PATINDEX('%[^,REVERSE(Numbers)),TrimEnd = LEFT(Numbers,REVERSE(Numbers)) - 1))
FROM    (VALUES 
            ('1,3'),('1,'),5,(',')
        ) t (Numbers);

编辑

为了响应编辑,语法中有一些错误,下面的函数可以修剪开始,并修剪逗号的两边:

SELECT  Numbers,REVERSE(Numbers)) - 1)),TrimStart = SUBSTRING(Numbers,PATINDEX('%[^,Numbers),LEN(Numbers)),TrimBothSide = SUBSTRING(Numbers,LEN(Numbers) - 
                                        (PATINDEX('%[^,REVERSE(Numbers)) - 1) - 
                                        (PATINDEX('%[^,Numbers) - 1)
                                    )
FROM    (VALUES 
            ('1,')
        ) t (Numbers);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读