loading..
Русский    English
01:23
листать

Функции STR, SPACE, LTRIM и RTRIM стр. 2

Для усечения концевых пробелов в SQL Server изначально имелось две функции - LTRIM и RTRIM  - для усечения пробелов слева и справа соответственно. Чтобы удалить пробелы с обеих сторон строки, последовательно применялись обе функции (в примере для наглядности используется функция DATALENGTH , возвращающая число символов с учетом пробелов):

  1. declare @s varchar(10) ='  x ' -- слева 2 пробела, справа - 1
  2. SELECT datalength(@s) s, datalength(ltrim(@s)) ls,
  3.         datalength(rtrim(@s)) rs, datalength(ltrim(rtrim(@s))) bs;

s    ls    rs    bs
4    2    3    1

Начиная с версии SQL Server 2017, к ним добавилась новая функция - TRIM, которая выполняет усечение с обеих сторон строки-аргумента:

  1. SELECT datalength(@s) s, datalength(trim(@s)) ts;

s    ts
4    1

Кроме того, функция TRIM приобрела дополнительный функционал - возможность усекать произвольные концевые символы.

При этом усекаемые символы можно задавать списком, перечисляя их в произвольном порядке. Усекаться (с обеих сторон) будут все входящие в список символы, пока не появится "посторонний", т.е. не входящий в список. Лучше всего продемонстрировать сказанное на примере.

  1. declare @s1 varchar(10)='xxaxbxy'
  2. 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>

MySQL

В MySQL используется стандартный синтаксис функции TRIM. При этом, в отличие от SQL Server, удаляется указанная подстрока, а не все символы из списка:

  1. SELECT TRIM(LEADING 'xy' FROM 'xyxybarxyx') ls,
  2. TRIM(TRAILING 'xy' FROM 'xyxybarxyx') rs,
  3. TRIM(BOTH 'yx' FROM 'xyxybarxyx') bs;

ls    rs    bs
barxyx    xyxybarxyx    xyxybarx


PostgreSQL

PostgreSQL сочетает поведение MySQL и SQL Server, т.е. удаляются все символы из списка:

  1. SELECT TRIM(LEADING 'xy' FROM 'xyxybarxyx') ls,
  2. TRIM(TRAILING 'xy' FROM 'xyxybarxyx') rs,
  3. TRIM(BOTH 'yx' FROM 'xyxybarxyx') bs;

ls    rs    bs
barxyx    xyxybar    bar


Oracle

Oracle допускает усечение только одного символа, а не подстроки или символов из списка:

  1. SELECT TRIM(LEADING 'x' FROM 'xxybarxyx') ls,
  2. TRIM(TRAILING 'x' FROM 'xxybarxyx') rs,
  3. TRIM(BOTH 'x' FROM 'xxybarxyx') bs
  4. FROM dual;

ls    rs    bs
ybarxyx xxybarxy ybarxy


Bookmark and Share
Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.