我有列(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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。