Делимся последними новостями о СУБД SoQoL

Убрать слева, справа или везде

Убрать слева, справа или везде

При анализе текстовых данных, выполнении операций со строками может возникнуть необходимость удалить пробелы или другие символы с одного или обоих концов строк.

Что может помочь в таких случаях?

Для решения таких моментов в СУБД 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!