Действие функций PL/SQL TRIM, LTRIM
и RTRIM
противоположно действию LPAD
и RPAD
: эти функции удаляют символы от начала и от конца строки. Пример:
DECLARE a VARCHAR2(40) := 'This sentence has too many periods......'; b VARCHAR2(40) := 'The number 1'; BEGIN DBMS_OUTPUT.PUT_LINE( RTRIM(a,'.') ); DBMS_OUTPUT.PUT_LINE( LTRIM(b, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz') ); END;
Результат:
This sentence has too many periods 1
Как видите, функция RTRIM
удалила все точки. Второй аргумент этой функции определяет удаляемые символы. В приведенном примере вызов LTRIM
выглядит немного абсурдно, но он демонстрирует возможность задания целого набора удаляемых символов. Мы запрашиваем удаление всех букв и пробелов от начала строки b
и получаем желаемое.
По умолчанию функции удаляют пробелы в начале или в конце строки. Вызов RTRIM
(a) эквивалентен RTRIM
(a,' '). То же самое относится к LTRIM
(a) и LTRIM
(a,' ').
Еще одна функция удаления символов из строки — TRIM
— была включена в Oracle8i для более полного соответствия стандарту ISO SQL. Как видно из следующего примера, функция TRIM
несколько отличается от LTRIM
и RTRIM
:
DECLARE x VARCHAR2(30) := '.....Hi there!.....'; BEGIN DBMS_OUTPUT.PUT_LINE( TRIM(LEADING '.' FROM x) ); DBMS_OUTPUT.PUT_LINE( TRIM(TRAILING '.' FROM x) ); DBMS_OUTPUT.PUT_LINE( TRIM(BOTH '.' FROM x) ); --По умолчанию удаление производится с обоих концов строки DBMS_OUTPUT.PUT_LINE( TRIM('.' FROM x) ); --По умолчанию удаляются пробелы: DBMS_OUTPUT.PUT_LINE( TRIM(x) ); END; Результат: Hi there!..... .....Hi there! Hi there! Hi there! .....Hi there!.....
Одна функция позволяет усекать строку с любой из двух сторон или же с обеих сторон сразу. Тем не менее вы можете задать только один удаляемый символ. Например, следующая запись недопустима:
TRIM(BOTH ',.;' FROM x)
Вместо нее для решения нашей конкретной задачи приходится использовать комбинацию RTRIM
и LTRIM
:
RTRIM(LTRIM(x,',.;'),',.;')