我有列(数字),其值如下:
1,2,3
1,2,3,
1,2,3,,,
1,2,3,,,,,,
我想修剪字符串末尾的所有逗号,这样结果就是
1,2,3
1,2,3
1,2,3
1,2,3
我试过下面的查询,但通过这个我们只能删除最后一个逗号
DECLARE @String as VARCHAR(50)
SET @String='1,2,3,4,,,,,,,,,,,,,,,,'
SELECT CASE WHEN right(rtrim(@String),1) = ',' then substring(rtrim(@String),1,len(rtrim(@String))-1)
ELSE @String
END AS TruncString
如何删除字符串末尾的所有逗号?
最佳答案
您可以使用以下方法执行此操作:
LEFT(Numbers, LEN(Numbers) - (PATINDEX('%[^,]%', REVERSE(Numbers)) - 1))
这样做的前提是您首先使用
REVERSE
反转字符串:REVERSE(Numbers) --> ,,,,,,3,2,1
然后使用
PATINDEX
找到第一个不是逗号的字符的位置。和模式匹配 [^,]
:PATINDEX('%[^,]%', REVERSE(Numbers)) --> ,,,,,,3,2,1 = 7
然后你可以使用字符串的长度
LEN
, 获取反转位置,即如果第一个不是逗号的字符在反转字符串中的位置为 7,并且字符串的长度为 10,那么您需要该字符串的前 4 个字符。然后您使用 SUBSTRING
提取相关部分一个完整的例子是
SELECT Numbers,
Reversed = REVERSE(Numbers),
Position = PATINDEX('%[^,]%', REVERSE(Numbers)),
TrimEnd = LEFT(Numbers, LEN(Numbers) - (PATINDEX('%[^,]%', REVERSE(Numbers)) - 1))
FROM (VALUES
('1,2,3'),
('1,2,3,'),
('1,2,3,,,'),
('1,2,3,,,,,,'),
('1,2,3,,,5,,,'),
(',,1,2,3,,,5,,')
) t (Numbers);
编辑
为了响应在语法中存在一些错误的编辑,以下具有修剪开头和修剪逗号两侧的功能:
SELECT Numbers,
Reversed = REVERSE(Numbers),
Position = PATINDEX('%[^,]%', REVERSE(Numbers)),
TrimEnd = LEFT(Numbers, LEN(Numbers) - (PATINDEX('%[^,]%', REVERSE(Numbers)) - 1)),
TrimStart = SUBSTRING(Numbers, PATINDEX('%[^,]%', Numbers), LEN(Numbers)),
TrimBothSide = SUBSTRING(Numbers,
PATINDEX('%[^,]%', Numbers),
LEN(Numbers) -
(PATINDEX('%[^,]%', REVERSE(Numbers)) - 1) -
(PATINDEX('%[^,]%', Numbers) - 1)
)
FROM (VALUES
('1,2,3'),
('1,2,3,'),
('1,2,3,,,'),
('1,2,3,,,,,,'),
('1,2,3,,,5,,,'),
(',,1,2,3,,,5,,')
) t (Numbers);
关于sql - SQL Server 中的 TrimEnd 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28190872/