2015-01-23 8 views
0

Поскольку LTRIM и RTRIM не работают над моим кодом, мне нужно найти способ удалить определенные символы из моей строки, но только в конце.Удалить все конкретные символы в конце строки

Символы, о которых идет речь, - CHAR(10) + CHAR(13) + CHAR(32). Удача в том, что они всегда встречаются в этой комбинации/порядке.

Я не хочу заменять все эти комбинации в своей строке, я хочу только удалить их в конце.

Я думал о REVERSE и PATINDEX с рисунком, но я не уверен, что это лучший способ? И какой будет REGEX для этой комбинации?

СУБД: MSSQL 2012

+1

Какие dbms? (LTRIM и RTRIM не являются функциями ANSI SQL.) – jarlh

ответ

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 не включает в себя хвостовые пробелы, следовательно, не -3 -2.

+0

Проблема в том, что в конце может быть несколько случаев. – Spurious

Смежные вопросы