При анализе текстовых данных, выполнении операций со строками может возникнуть необходимость удалить пробелы или другие символы с одного или обоих концов строк.
Что может помочь в таких случаях?
Для решения таких моментов в СУБД SoQoL реализованы функции: LTRIM, RTRIM, TRIM.
Посмотрим сначала на LTRIM и RTRIM:
– позволяют удалить заданное множество символов. Эти два слова намеренно выделены жирным. Мы к ним ещё вернёмся;
– удаляемым по умолчанию символом является пробел;
– каждая функция может удалить символы только с одной стороны исходной строки: L – слева, R – справа.
Пример:
Предположим, у нас есть таблица "EMPLOYEES" с полем "NAME", в котором содержатся фамилии и имена сотрудников:
NAME
---------------
| Мария Иванова|
|Александр Котов|
| Пётр Кислов|
| Алёна Иванова|
Как видно, в начале некоторых имён есть пробелы. Необходимо их убрать, чтобы имена были внесены в таблицу однородно:
update EMPLOYEES set NAME = ltrim (NAME);
NAME
------------------
|Мария Иванова|
|Александр Котов|
|Пётр Кислов|
|Алёна Иванова|
Одним лёгким движением в строках всего столбца убраны ненужные символы. С этим массивом данных можно работать дальше.
Функция RTRIM работает также как и LTRIM, только справа.
И такая реализация LTRIM и RTRIM во всех популярных СУБД.
Далее, изучив работу функции TRIM в других СУБД, мы реализовали и её.
В СУБД SoQoL функцией TRIM можно удалять символы по сценарию, соответствующему указанному ключевому слову в команде:
- LEADING – слева строки;
- TRAILING – справа строки;
- BOTH – с начала и конца строки. И это правило по умолчанию.
Важен один момент (и вот здесь мы возвращаемся к выделенному жирным в начале) - мы реализовали в SoQoL функцию TRIM как в Oracle, и она позволяет сейчас указать для удаления только один символ.
Например, в Postgres и MSSQL функция TRIM, по аналогии с LTRIM и RTRIM, позволяет указывать для удаления не один символ, а набор символов, которые будут удалены из заданной строки.
Такая реализация TRIM, как в Postgres, выглядит логичным продолжением LTRIM и RTRIM, покрывая собой их способности. Поэтому мы призадумались об изменении поведения функции TRIM.
Что скажете? Как опытные пользователи СУБД Oracle, почему по вашему мнению, в функции TRIM допустимо для удаления указание только одного символа? Может это на что-то влияет?
Обсудить в Telegram!