Обрезать строку Oracle до количества символов

Обновлено: 03.07.2024

Строка в PL/SQL на самом деле представляет собой последовательность символов с необязательным указанием размера. Символы могут быть цифрами, буквами, пробелами, специальными символами или их комбинацией. PL / SQL предлагает три типа строк —

Строки фиксированной длины. В таких строках программисты указывают длину при объявлении строки. Строка дополняется справа пробелами до указанной длины.

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

Большие символьные объекты (CLOB) — это строки переменной длины, которые могут достигать 128 терабайт.

Строки PL/SQL могут быть как переменными, так и литералами. Строковый литерал заключается в кавычки. Например,

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

Объявление строковых переменных

База данных Oracle предоставляет множество строковых типов данных, таких как CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB и NCLOB. Типы данных с префиксом «N» — это типы данных «национального набора символов», в которых хранятся данные символов Unicode.

Если вам нужно объявить строку переменной длины, вы должны указать максимальную длину этой строки. Например, тип данных VARCHAR2. В следующем примере показано объявление и использование некоторых строковых переменных —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Чтобы объявить строку фиксированной длины, используйте тип данных CHAR. Здесь вам не нужно указывать максимальную длину для переменной фиксированной длины. Если вы опустите ограничение длины, Oracle Database автоматически использует максимальную требуемую длину. Следующие два объявления идентичны —

Строковые функции и операторы PL/SQL

PL/SQL предлагает оператор конкатенации (||) для соединения двух строк. В следующей таблице представлены строковые функции, предоставляемые PL/SQL —

Возвращает значение ASCII символа x.

Возвращает символ со значением ASCII x.

Объединяет строки x и y и возвращает добавленную строку.

Преобразует начальную букву каждого слова в x в верхний регистр и возвращает эту строку.

INSTR(x, find_string [, начало] [, вхождение]);

Выполняет поиск строки find_string в x и возвращает позицию, в которой она встречается.

Возвращает расположение строки в другой строке, но возвращает значение в байтах.

Возвращает количество символов в x.

Возвращает длину строки символов в байтах для однобайтового набора символов.

Преобразует буквы x в нижний регистр и возвращает эту строку.

LPAD(x, ширина [, pad_string]) ;

Дополняет x пробелами слева, чтобы довести общую длину строки до символов ширины.

LTRIM(x [, trim_string]);

Обрезает символы слева от x.

NANVL(x, значение);

Возвращает значение, если x соответствует специальному значению NaN (не числу), в противном случае возвращается x.

NLS_INITCAP(x);

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

NLS_LOWER(x);

То же, что и функция LOWER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

То же, что и функция UPPER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

Изменяет метод сортировки символов. Должен быть указан перед любой функцией NLS; в противном случае будет использоваться сортировка по умолчанию.

Возвращает значение, если x равно null; в противном случае возвращается x.

NVL2(x, значение1, значение2);

Возвращает значение1, если x не равен нулю; если x равно null, возвращается значение2.

ЗАМЕНИТЬ(x, строка_поиска, строка_заменить);

Ищет x для search_string и заменяет его на replace_string.

RPAD(x, ширина [, pad_string]);

Добавляет x вправо.

RTRIM(x [, trim_string]);

Обрезает x справа.

Возвращает строку, содержащую фонетическое представление x.

SUBSTR(x, начало [, длина]);

Возвращает подстроку x, начинающуюся с позиции, указанной параметром start. Можно указать необязательную длину подстроки.

То же, что и SUBSTR, за исключением того, что параметры выражаются в байтах, а не в символах для однобайтовых систем символов.

ОТРЕЗАТЬ([trim_char FROM) x);

Обрезает символы слева и справа от x.

Преобразует буквы x в верхний регистр и возвращает эту строку.

Давайте теперь поработаем над несколькими примерами, чтобы понять концепцию –

Пример 1

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Пример 2

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

У вас есть столбец строк, и вы хотите получить из него подстроки.

Пример 1:

В таблице адресов электронной почты есть столбец электронной почты. Вы хотите отображать первые семь символов каждого электронного письма.

Таблица выглядит следующим образом:

Решение 1:

Обсуждение:

Используйте функцию SUBSTR(). Первый аргумент — это строка или имя столбца. Второй аргумент — это индекс символа, с которого должна начинаться подстрока. Третий аргумент — это длина подстроки.

Осторожно! В отличие от некоторых других языков программирования, индексы начинаются с 1, а не с 0. Это означает, что первый символ имеет индекс 1, второй символ имеет индекс 2 и т. д.

>SUBSTR(email, 1, 7) вернет подстроки значений в столбце электронной почты, которые начинаются с первого символа и заканчиваются семью символами.

Пример 2:

Вы хотите отобразить подстроку между индексами 2 и 6 (включительно).

Решение 2:

Обсуждение:

Вы используете функцию SUBSTR() так же, как и в предыдущем примере. На этот раз второй аргумент функции равен 2, так как мы хотим начать с индекса 2. Длина подстроки равна 5 ( end_index - start_index + 1 ).

Пример 3:

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

Решение 3.

Обсуждение:

Вы используете функцию SUBSTR() так же, как и в предыдущих примерах. На этот раз вы ищете определенный символ, положение которого может меняться от строки к строке. Чтобы найти индекс определенного символа, вы можете использовать функцию INSTR (столбец, символ), где столбец — это литеральная строка или столбец, из которого вы хотите получить подстроку, а символ — это символ, в котором вы хочу начать подстроку (здесь @ ).

Третий аргумент функции SUBSTR() — это длина подстроки. Вы можете вычислить его, используя функции INSTR() и LENGTH(). Вы делаете это, вычитая индекс из длины столбца, а затем добавляя 1:

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

Результат этого запроса:

Часть INSTR(email, '.') - INSTR(email, '@') просто вычисляет длину подстроки.

В этой статье вы узнаете все о трех функциях TRIM в Oracle: TRIM, LTRIM и RTRIM.

Назначение функций TRIM, LTRIM и RTRIM

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

Функция Oracle LTRIM удалит указанный символ из левой части строки. Буква L в LTRIM означает «Слева» и является противоположностью RTRIM или функции обрезки «Право»

Наконец, функция Oracle RTRIM удаляет указанный символ с правой стороны строки.

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

Давайте посмотрим на синтаксис этих трех функций.

Синтаксис и параметры

Синтаксис и параметры TRIM

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

ОТРЕЗАТЬ ( [ [ НАЧАЛО | КОНЕЦ | ОБА ] символ_обрезки ОТ ] источник_обрезки )

Для этой функции можно дополнительно указать LEADING, TRAILING или BOTH. Вы также можете указать символ обрезки, но если вы это сделаете, вам понадобится слово FROM.

  • НАЧАЛО (необязательно): если вы укажете НАЧАЛО, функция удалит символ обрезки из начала строки trim_source.
  • TRAILING (необязательно): если вы укажете TRAILING, функция удалит trim_character из конца строки trim_source.
  • ОБА (необязательно): если указать ОБА, функция удалит символ_обрезки из начала и конца строки источник_обрезки.
  • trim_character FROM (необязательно): это символ, который нужно удалить из строки trim_source. Если это не указано, то используется пробел. Если это буквальное значение, оно должно быть заключено в одинарные кавычки.
  • trim_source (обязательный): это строковое значение, из которого удаляются символы.

Некоторые дополнительные моменты, которые следует помнить для этой функции:

  • Если вы не укажете LEADING, TRAILING или BOTH, функция выполнит то же действие, как если бы вы указали BOTH. Например, он удаляет символы из начала и конца строки.
  • И trim_character, и trim_source могут быть любыми из CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
  • Функция возвращает тип данных VARCHAR2, если trim_source является символьным типом данных, или LOB, если trim_source имеет тип данных LOB.Он также возвращается в том же наборе символов, что и trim_source.
  • При необходимости вы можете использовать функцию CHR в качестве символа обрезки. Например, используя CHR(100).

Синтаксис и параметры LTRIM

Синтаксис функции LTRIM:

  • input_string (обязательный): это строка, из которой удаляются символы с левой стороны.
  • trim_string (необязательно): это строка, которую нужно удалить из input_string. Если он не указан, используется пробел, и все пробелы слева от input_string удаляются.

Несколько замечаний по поводу LTRIM:

  • Если trim_string является буквальным значением, его необходимо заключить в одинарные кавычки. Например, чтобы убрать подчеркивание, нужно указать его как «_»
  • И input_string, и trim_string могут иметь тип данных CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
  • Возвращаемое значение представляет собой тип данных VARCHAR2, если используются входные типы CHAR, VARCHAR2, NCHAR или NVARCHAR2, и возвращаемое значение представляет собой тип данных LOB, если входные типы являются LOB или CLOB.
  • trim_string может содержать более одного символа
  • Эта функция удаляет каждое отдельное значение внутри trim_string, а не строку целиком. Дополнительные сведения см. в разделе "Примеры" ниже.

Синтаксис и параметры RTRIM

Синтаксис функции Oracle RTRIM:

  • input_string (обязательный): это строка, из которой будут вырезаны символы.
  • trim_string (необязательно): это значение, которое нужно обрезать или удалить из input_string. Если он опущен, для обрезки используется пробел.

Буква R в RTRIM означает "справа", потому что она удаляет символы справа от строки.

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

  • Если trim_string является буквальным значением, его необходимо заключить в одинарные кавычки. Например, чтобы убрать подчеркивание, нужно указать его как «_»
  • Оба параметра могут быть любого типа CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
  • Возвращаемая строка имеет тип данных VARCHAR2, если input_string был символом, и LOB, если это был тип данных LOB.
  • trim_string может содержать более одного символа
  • Эта функция удаляет каждое отдельное значение внутри trim_string, а не строку целиком. Дополнительные сведения см. в разделе "Примеры" ниже.

Может ли Oracle обрезать последний символ?

Да, это возможно с помощью функции TRIM, но, вероятно, лучше использовать функцию SUBSTR.

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

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

Можно ли использовать TRIM для обрезки пробелов в строке?

Да, и это, вероятно, наиболее частое использование функции TRIM в Oracle. Я использовал его много раз, чтобы очистить пользовательский ввод (например, если пользователи вводят свое имя с пробелом в конце). Это лучше для хранения в базе данных и полезно для сравнения данных.

Для этого вашей функцией может быть:

Это вернет значение trim_value без пробелов в конце или в начале, что эффективно обрезает пробелы в строке. Подробнее о том, как это делается, см. в примерах ниже.

Как Oracle может обрезать символы новой строки или возврат каретки?

Использование функции TRIM для удаления символов новой строки или возврата каретки можно выполнить с помощью Oracle. Это может работать, если у вас есть только символ новой строки или только возврат каретки, так как вы можете использовать функцию CHR.

Удаляет символы новой строки.

Удаляет символы возврата каретки.

CHR(10) возвращает символ новой строки, а CHR(13) возвращает символ возврата каретки.

Но что, если у вас есть и то, и другое? Или это смешано с пробелами и символами табуляции (CHR(9))?

Основная проблема заключается в том, что TRIM удаляет только один тип символов — вы можете указать только один символ для удаления TRIM.

Что делать, если вы используете рекурсивную функцию TRIM?

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

Подход, рекомендованный пользователями Stack Overflow, заключается в использовании функции ПЕРЕВОД, которая переводит все вхождения строки в пробел, а затем ОБРЕЗАЕТ строку пробелов. Посмотрите примеры ниже, как это сделать.

Вы также можете использовать функцию REGEXP_REPLACE, которая немного более гибкая, но и более сложная.

Может ли Oracle обрезать левую часть строки?

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

При этом будет использоваться функция Oracle TRIM для обрезки левого края строки.

В качестве альтернативы вы можете использовать функцию LTRIM.

Как Oracle может обрезать все пробелы в строке?

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

Если вы хотите включить символы новой строки и возврата каретки, используйте также функцию ПЕРЕВОД, как показано в примере ниже.

Вы также можете использовать функцию REGEXP_REPLACE, которая немного более гибкая, но и более сложная.

Как Oracle может обрезать пробелы между словами?

Функция Oracle TRIM не обрезает пробелы между словами. Вы можете использовать регулярное выражение с REGEXP_REPLACE, чтобы удалить вхождения более одного пробела. Или вы можете использовать функцию ЗАМЕНИТЬ, чтобы удалить все пробелы между словами, но это приведет к одному длинному слову.

Как Oracle может обрезать столбец?

Вы можете использовать Oracle TRIM для имени столбца вместо конкретной строки. Вы бы просто указали имя столбца, а также свои параметры.

Если вы хотите обновить значения в столбце, используйте оператор UPDATE:

Можно ли использовать Oracle LTRIM для удаления начальных нулей?

Да, можно. Это одно из наиболее распространенных применений функции, которое я видел.

Это можно сделать следующим образом:

Дополнительную информацию см. в разделе "Примеры" ниже.

Можно ли использовать Oracle LTRIM с RTRIM?

Да, можно, и это работает так же, как и при использовании функции TRIM.

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

Таким образом, вы можете использовать либо LTRIM(RTRIM(значение)) либо RTRIM(LTRIM(значение)).

Дополнительную информацию см. в разделе "Примеры" ниже.

Есть ли у Oracle другие способы обрезки строк?

Да, в Oracle есть несколько способов обрезать строки:

  • Использовать LTRIM или RTRIM
  • Использовать ТРИМ
  • Используйте ЗАМЕНУ
  • Используйте SUBSTR, если вам нужны дополнительные функции обрезки.
  • Используйте регулярные выражения

Можно ли использовать Oracle LTRIM или RTRIM со специальными символами?

Да, можно. В качестве входных данных можно использовать восклицательные знаки и множество специальных символов.

Вы также можете использовать символы Юникода, например å, поскольку функция поддерживает типы NVARCHAR2.

Дополнительную информацию см. в разделе "Примеры".

Можно ли использовать Oracle LTRIM или RTRIM с типами CHAR или LOB?

Да, Oracle RTRIM может обрабатывать типы CHAR и LOB. Он может обрабатывать типы данных CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.

Примеры функции TRIM

Вот несколько примеров функции TRIM. Я считаю, что примеры — лучший способ узнать о коде, даже с объяснением выше.

Пример 1. Пробелы в конце

В этом примере удаляются конечные пробелы из строки.

< /tbody>
ОБРЕЗАНО
Джек

Пробелы в конце слова "Джек" удалены.

Пример 2. Ведущие пробелы

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

< /tbody>
ОБРЕЗАНО
Джон

Пробелы в начале слова "Джон" удалены.

Пример 3 – начало и конец

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

< /tbody>
ОБРЕЗАНО
Джули

Пробелы в начале и конце слова «Юлия» удалены.

Пример 4. Ключевое слово LEADING

В этом примере удаляются начальные пробелы из строки путем указания LEADING.

< /tbody>
ОБРЕЗАНО
Джули

Пробелы в начале слова «Юлия» удаляются, но пробелы в конце остаются. Возможно, вы не сможете увидеть его на странице, пока не выделите текст.

Пример 5. Ключевое слово TRAILING

В этом примере удаляются конечные пробелы из строки путем указания TRAILING.

< /tbody>
ОБРЕЗАНО
Джули

Пробелы в конце слова «Юлия» удаляются, но пробелы в начале остаются. Возможно, вы не сможете увидеть его на странице, пока не выделите текст.

Пример 6 — ключевое слово BOTH

В этом примере удаляются начальные и конечные пробелы из строки путем указания ОБА.

< /tbody>
ОБРЕЗАНО
Джули

Пробелы в начале и конце слова «Юлия» удалены.

Пример 7. Подчеркивание

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

< /tbody>
ОБРЕЗАНО
Иордания

Пример 8. Новая строка и возврат каретки

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

FULL_STRING ОБРЕЗАНО
первая строка после табуляцииследующая строка
другая строка
первая строка после табуляции следующая строка еще одна строка

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

Пример 9. Заявление об обновлении

В этом примере обновляется значение в таблице клиентов.

Во-первых, давайте посмотрим, что находится в таблице клиентов.

< /tbody>
FIRST_NAME
Джейсон

Теперь давайте изменим first_name, чтобы удалить пробелы

Теперь давайте еще раз взглянем на таблицу клиентов.

< /tbody>
FIRST_NAME
Джейсон

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

Пример 10. Простой LTRIM и RTRIM

В этом примере показаны простые LTRIM и RTRIM без указания значения обрезки.

LTRIM_EXAMPLE RTRIM_EXAMPLE
Звезда базы данных Звезда базы данных< /td>

Лишние пробелы удаляются из исходного значения.

Пример 11 — LTRIM и RTRIM с конкретным значением

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

LTRIM_EXAMPLE RTRIM_EXAMPLE
Звезда базы данных Звезда базы данных< /td>

Подчеркивания удаляются из исходного значения.

Пример 12. LTRIM и RTRIM с несколькими символами

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

LTRIM_EXAMPLE RTRIM_EXAMPLE
Звезда базы данных Звезда базы данных< /td>

Из исходного значения удаляются пробелы и точки с запятой.

Пример 13. LTRIM и RTRIM в столбцах таблицы

В этом примере используются LTRIM и RTRIM для данных в таблице вместо предоставления значения.

< /таблица>

Заглавная буква U удаляется слева от нескольких значений, а заглавная буква A удаляется справа от нескольких значений.

В Oracle функция TRIM() позволяет обрезать символы по бокам строки.

Вы можете обрезать начальные символы, конечные символы или и то, и другое.

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

Синтаксис

Синтаксис выглядит следующим образом:

Как trim_character, так и trim_source могут быть VARCHAR2 или любым другим типом данных, который может быть неявно преобразован в VARCHAR2 .

Пример

Вот простой пример для демонстрации:

В этом случае указанный символ ( . ) был удален с обеих сторон строки.

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

Тот же результат можно получить, включив ОБА ключевого слова:

Обрезать начальные символы

Вот это снова, но только с удаленными начальными символами:

Обрезать конечные символы

А вот и удалены только конечные символы:

Символ по умолчанию

В этом примере я не указываю символ для обрезки, поэтому он обрезает пустое пространство:

Не так легко увидеть эффект от обрезки пробелов с обеих сторон.

Вот еще один пример, на котором легче увидеть, что пустое пространство было удалено с обеих сторон:

Числа

Строка и символ обрезки могут быть типа VARCHAR2 или любого другого типа данных, который можно неявно преобразовать в VARCHAR2 , поэтому мы можем передать число, подобное следующему. Однако возвращаемое значение равно VARCHAR2 .

Вот это с обрезанным другим числом:

Нулевые значения

Если строка или символ обрезки равны нулю, результат равен нулю:

По умолчанию SQLcl и SQL*Plus возвращают пустое место всякий раз, когда в результате выполнения инструкции SQL SELECT возникает нуль.

Однако вы можете использовать SET NULL, чтобы указать другую возвращаемую строку. Здесь я указал, что должна быть возвращена строка null.

Обрезка пустых строк

Передача пустой строки в качестве символа обрезки приводит к нулевому значению:

Но добавление одного пробела к пустой строке меняет ситуацию и удаляет все пробелы из строки:

Неверный счетчик аргументов

Вызов TRIM() без передачи каких-либо аргументов возвращает ошибку:

И передача неправильного количества аргументов приводит к ошибке:

Также см. RTRIM() и LTRIM(), где описаны более точные функции для обрезки каждой стороны строки. Эти функции также позволяют обрезать несколько символов из строки.

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

COUNTRY LTRIM_EXAMPLE RTRIM_EXAMPLE
США SA США
Франция Франция Франция
Канада Канада Канада
Великобритания K Великобритания
Норвегия Норвегия Норвегия