Oracle убрать пробелы в строке
Действие функций 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 .
Читайте также: