Oracle убрать пробелы в строке

Обновлено: 02.07.2024

Действие функций PL/SQL TRIM, LTRIM и RTRIM противоположно действию LPAD и RPAD : эти функции удаляют символы от начала и от конца строки. Пример:

Как видите, функция RTRIM удалила все точки. Второй аргумент этой функции определяет удаляемые символы. В приведенном примере вызов LTRIM выглядит немного абсурдно, но он демонстрирует возможность задания целого набора удаляемых символов. Мы запрашиваем удаление всех букв и пробелов от начала строки b и получаем желаемое.

Еще одна функция удаления символов из строки — TRIM — была включена в Oracle8i для более полного соответствия стандарту ISO SQL. Как видно из следующего примера, функция TRIM несколько отличается от LTRIM и RTRIM :

Одна функция позволяет усекать строку с любой из двух сторон или же с обеих сторон сразу. Тем не менее вы можете задать только один удаляемый символ. Например, следующая запись недопустима:

Вместо нее для решения нашей конкретной задачи приходится использовать комбинацию RTRIM и LTRIM :

Базы данных

Узнайте, как использовать Oracle / PLSQL функцию TRIM с синтаксисом и примерами.

Описание

Функция Oracle / PLSQL TRIM удаляет все указанные символы с начала или окончания строки.

Синтаксис

Синтаксис функции Oracle / PLSQL TRIM:

Параметры или аргументы

LEADING — удалит trim_character с начала string1 .

TRAILING — удалит trim_character с конца string1 .

BOTH — удалит trim_character с начала и с конца string1 .

trim_character — это символ, который будет удален из string1 . Если этот параметр не указан, функция TRIM удалит пробелы из string1 .

string1 — строка для удаления.

Примечание

  • Функция TRIM возвращает string значение.
  • Если вы не выберите значение для первого параметра (LEADING, TRAILING, BOTH), функция TRIM удалит trim_character с начала и с конца string1 .
  • См. также функции LTRIM и RTRIM.

Применение

Функцию TRIM можно использовать в следующих версиях Oracle / PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Пример

Рассмотрим несколько примеров функции TRIM и изучим, как использовать функцию TRIM в Oracle / PLSQL.

December 2018

119.3k раз

В моей базе данных Oracle 10g, я хотел бы, чтобы удалить «пробелы» (пробелы, табуляции, возврата каретки . ) из значений поля таблицы.

Спасибо за любой совет.

6 ответы

Ни один из приведенных выше утверждений будут удалены «пустые» символы.

Для того, чтобы удалить «обнуляет» упаковывают заявление с заменить

Чтобы удалить пробельные вы могли бы использовать:

Пример: удалить все пробелы в таблице:

Я бы пойти на regexp_replace, хотя я не 100% уверен, что это может использоваться в PL / SQL

Для того, чтобы заменить один или несколько пробельных символов на один пробел , вы должны использовать <2,>вместо * , в противном случае вы бы insert пустой между всеми без пробелов.

Поскольку вы комфортно с регулярными выражениями, вы, вероятно, хотите использовать функцию regexp_replace. Если вы хотите устранить все, что соответствует [: пространство:] POSIX класс

Если вы хотите оставить одно место места для каждого множества непрерывных космических символов, просто добавьте + в регулярное выражение и использовать пространство как символ замены.

UPPER, LOWER

Данные функции уже описывались раньше.

  • UPPER : приводит строку к верхнему регистру
  • LOWER : приводит строку к нижнему регистру

Рекомендуется использовать одну из этих функций, если нужно сравнить две строки между собой без учета регистра символов.

Конкатенация строк

Конкатенация - это "склейка" строк. Т.е., если у нас есть 2 строки - "Новый", "фотоаппарат", то результатом конкатенации будет строка "Новый фотоаппарат".

Для склейки строк в Oracle используется оператор || .


Поиск подстроки

Для того, чтобы найти вхождение одной строки в другую, используется функция INSTR . Она возвращает позицию вхождения одной строки в другую. Если вхождения не обнаружено, то в качестве результата будет возвращён 0.

Следующий запрос возвращает позицию, начиная с которой в заголовках записей пользователей встречается символ восклицательного знака:


Как видно, для тех заголовков, которые не содержат восклицательный знак, функция INSTR вернула 0.

В функции INSTR можно задавать позицию, начиная с которой следует производить поиск вхождения:


Данный запрос вернет позицию буквы о в заголовках записей, но поиск будет производить лишь начиная с 3-го символа заголовка.

Так, в строке "Новый фотоаппарат" мы получили результат 8, хотя буква о есть и раньше - на второй позиции.

В качестве стартовой позиции поиска можно указывать отрицательное число. В этом случае функция отсчитает от конца строки указанное количество символов и будет производить поиск начиная от этой позиции и заканчивая началом строки:


Также можно указать, какое по счету совпадение нужно искать(4-ый параметр в функции INSTR ):


Подобие строк. Like

Для рассмотрения этой темы будем использовать данные из части про сортировку.

Предположим, нам понадобилось посмотреть, какие чаи есть у нас в меню. В данном примере единственный способ, которым мы можем определить, что блюдо является чаем - это проверить, содержится ли слово чай в наименовании.

Но оператор сравнения здесь не подойдет, так как он вернет лишь те строки, которые будут полностью совпадать со строкой Чай.

Перед рассмотрением примера добавим в таблицу меню немного чайных блюд:

Гениальные маркетологи решили, что будут добавлять по одному символу в конце слова чай для обозначения его крепости - "чай%" - совсем слабенький, "чай+" взбодрит с утра, а с "чаем!" можно забыть про сон на ближайшие сутки. Не будем задумываться, почему именно так, а просто примем это как есть.

Итак, первый пример использования LIKE :


Как видно, были получены все блюда, наименования которых начиналось с последовательности символов, составляющей слово Чай. Символ "%" в условии LIKE соответствует любой последовательности символов. Т.е. предыдущий запрос можно было читать так: "Получить все блюда, первые символы наименований которых составляют слово Чай, а после этих символов следует последовательность из любых символов в любом количестве, мне не важно". Кстати, в результат не попал зеленый чай - первые 3 символа наименования у него равны "Зел", но никак не "Чай".

Если не указывать символ "%", то запрос не вернет никаких данных:


При задании шаблонов в LIKE можно использовать следующие символы соответствия:

  • "%"(знак процента). Ему соответствует 0 или больше символов в значении.
  • "_"(нижнее подчеркивание). Ему соответствует ровно один символ в значении.

Получим все чаи, названия которых придумали маркетологи(а это любой 1 символ после слова "чай"):


Также, как и при обычном сравнении, учитывается регистр строк. Следующий запрос не вернет никаких данных, т.к. нет блюд, начинающихся со строки "чай", есть только блюда, начинающиеся на "Чай"(первая буква заглавная):


Получим только зеленый чай:


Здесь символ процента был перемещен перед словом "чай", что означает: "Любая последовательность символов(или их отсутствие), заканчивающаяся словом чай".

А для того, чтобы получить список всех блюд, в наименовании которых содержится слово "чай", можно написать следующий запрос:


Выражение ESCAPE в LIKE

Перед рассмотрением выражения опять добавим немного данных в таблицу dishes :

Перед нами стоит задача: получить список кофейных блюд, содержащих кофеин.

Можно выделить некоторый список признаков, по которым мы сможем определить, что кофе с кофеином:

  • Наименование начинается со слова "Кофе"
  • Если кофе с кофеином, то в скобках указывается его процентное содержание в виде "n% кофеина", где n - некоторое число.

На основании этих заключений можно написать следующий запрос:


В чем проблема, должно быть понятно - в том, что символ "%" в условии LIKE обозначает совпадение с 0 или больше любых символов.

Для того, чтобы учитывать непосредственно символ "%" в строке, условие LIKE немного видоизменяется:


Здесь после ключевого слова escape мы указываем символ, который будет экранирующим, т.е. если перед символами % будет стоять символ \ , то он будет рассматриваться как совпадение с одним символом % , а не как совпадение 0 и больше любых символов.

Приведение к верхнему регистру. INITCAP

Функция INITCAP делает первую букву каждого слова заглавной, оставляя остальную часть слова в нижнем регистре.



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

Замена подстроки. REPLACE

Для замены подстроки в строке используется функция REPLACE . Данная функция принимает 3 параметра, из них последний - не обязательный:

В случае, если не указать, на какую строку производить замену, то совпадения будут просто уделены из исходной строки.

Например, получим все "твиты" пользователя johndoe, но в заголовке поста заменим слово "фотоаппарат" заменим на слово "мыльница":


Удаление пробелов. TRIM

Есть 3 основных функции для удаления "лишних" пробелов из строки:

  • trim - удалить пробелы вначале и в конце строки
  • ltrim - удалить пробелы вначале строки (слева)
  • rtrim - удалить пробелы в конце строки (справа)

LPAD, RPAD

Эти функции используются, чтобы дополнить строку какими-либо символами до определенной длины.

LPAD (left padding) используется для дополнения строки символами слева, а RPAD (right padding) - для дополнения справа.


Первый параметр в этой функции - строка, которую нужно дополнить, второй - длина строки, которую мы хотим получить, а третий - символы, которыми будем дополнять строку. Третий параметр не обязателен, и если его не указывать, то строка будет дополняться пробелами, как в колонке n2_1 .

Читайте также: