Для усечения концевых пробелов в SQL Server изначально имелось две функции - LTRIM и RTRIM - для усечения пробелов слева и справа соответственно. Чтобы удалить пробелы с обеих сторон строки, последовательно применялись обе функции (в примере для наглядности используется функция DATALENGTH, возвращающая число символов с учетом пробелов):
declare @s varchar(10) =' x ' -- слева 2 пробела, справа - 1
select datalength(@s) s, datalength(ltrim(@s)) ls,
datalength(rtrim(@s)) rs, datalength(ltrim(rtrim(@s))) bs;
s ls rs bs
4 2 3 1
Начиная с версии SQL Server 2017, к ним добавилась новая функция - TRIM, которая выполняет усечение с обеих сторон строки-аргумента:
select datalength(@s) s, datalength(trim(@s)) ts;
s ts
4 1
Кроме того, функция TRIM приобрела дополнительный функционал - возможность усекать произвольные концевые символы.
При этом усекаемые символы можно задавать списком, перечисляя их в произвольном порядке. Усекаться (с обеих сторон) будут все входящие в список символы, пока не появится "посторонний", т.е. не входящий в список. Лучше всего продемонстрировать сказанное на примере.
declare @s1 varchar(10)='xxaxbxy'
select trim('yx' from @s1) ts1,trim('x' from @s1) ts2;
ts1 ts2
axb axbxy
Конечно, это еще не стандартное поведение, но уже близко. А вот что говорит стандарт относительно функции TRIM:
<trim function> ::= TRIM <left paren> <trim operands> <right paren>
<trim operands> ::= [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>
<trim source> ::= <character value expression>
<trim specification> ::= LEADING | TRAILING | BOTH
<trim character> ::= <character value expression>