Найти в Дзене
SQL от sql-ex.ru

Функция Trim в SQL Server

Для усечения концевых пробелов в 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>