由于LTRIM
和RTRIM
对我的代码不起作用,我需要找到一种从字符串中删除特定字符的方法,但仅限于最后。
有问题的字符是CHAR(10) + CHAR(13) + CHAR(32)
。
幸运的是,它们总是以组合/顺序出现。
我不想替换我的字符串中的所有组合,我只想在最后删除它们。
我在想REVERSE
和PATINDEX
有一种模式,但我不确定这是不是最好的方式?这个组合的REGEX是什么?
DBMS:MSSQL 2012
答案 0 :(得分:0)
标量函数可以做到这一点;
create function dbo.MyTrim(@text varchar(max)) returns varchar(max)
as
-- function to remove all occurences of (char(10) + char(13) + char(32)) from the right end of the input.
begin
while (right(@text, 3) = char(10) + char(13) + char(32))
begin
set @text = left(@text, len(@text) - 2)
end
return @text
end
go
declare @MyValue varchar(100); set @MyValue = 'Hello world!' + char(10) + char(13) + char(32)
select datalength(@MyValue), datalength(dbo.MyTrim(@MyValue))
set @MyValue = @MyValue + char(10) + char(13) + char(32)
select datalength(@MyValue), datalength(dbo.MyTrim(@MyValue))
set @MyValue = @MyValue + char(10) + char(13) + char(32)
select datalength(@MyValue), datalength(dbo.MyTrim(@MyValue))
请注意,LEN函数不包含尾随空格,因此-2不是-3。