删除字符串末尾的所有特定字符

时间:2015-01-23 13:25:29

标签: sql sql-server regex replace trim

由于LTRIMRTRIM对我的代码不起作用,我需要找到一种从字符串中删除特定字符的方法,但仅限于最后。

有问题的字符是CHAR(10) + CHAR(13) + CHAR(32)。 幸运的是,它们总是以组合/顺序出现。

我不想替换我的字符串中的所有组合,我只想在最后删除它们。

我在想REVERSEPATINDEX有一种模式,但我不确定这是不是最好的方式?这个组合的REGEX是什么?

DBMS:MSSQL 2012

1 个答案:

答案 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。