Совместное применение функций LENGTH, SUBSTR и INSTR
В предыдущих постах были описаны такие функции манипулирования символами, как LENGTH, SUBSTR, INSTR. Они используются для извлечения, преобразования и форматирования символьных строк.
Ниже приводятся решения задач с применением комбинаций этих функций. Предполагается, что есть таблица students со следующими значениями колонок last_name, first_name и address.
Задача первая: Необходимо создать запрос извлечения из значений колонки address только названия страны (т.е. – запятая и город не должны присутствовать).
Один из вариантов решения:
Шаг 1. С помощью функции INSTR определяется позиция символа “,” (запятая).
SELECT address, INSTR (address, ',') FROM students
Шаг 2. Полученные значения передаются как третий аргумент для функции SUBSTR.
SELECT address, SUBSTR (address, 1, (INSTR (address, ','))) FROM students
Шаг 3. Необходимо скорректировать запрос шага 2 для исключения запятой в названии страны. Для этого, полученное значение функцией INSTR надо уменьшить на 1. Итоговый запрос будет следующим:
SELECT last_name, first_name, SUBSTR (address, 1, (INSTR (address, ','))-1) country FROM students
Задача вторая: Создать запрос по извлечению из значений колонки address таблицы students только наименований города (т.е., страна и запятая не должны быть в получаемом результате).
Один из вариантов решения:
Шаг 1. С помощью функции INSTR определяется позиция символа “,” (запятая).
SELECT address, INSTR (address, ',') FROM students
Шаг 2. Полученные значения буду переданы как второй аргумент для функции SUBSTR – начальная позиция. Для исключения запятой и пробела перед названием города необходимо прибавить 2 (две позиции) к начальной позиции SUBSTR (ко второму аргументу). Для определения значения третьего параметра используется функция LENGTH. Итоговый запрос будет следующим:
SELECT last_name, first_name, SUBSTR (address, (INSTR (address, ',')+2), LENGTH (address) city FROM students
2 thoughts on “Совместное применение функций LENGTH, SUBSTR и INSTR”
Здравствуйте! Спасибо большое за статьи, благодаря им смог получше разобраться с sql. Но есть вопрос, возможно банальный. Слева и справа строку по отдельности я обрезаю. А как обрезать с обеих сторон одновременно?
справа:
nvl (substr (NOMER 0, instr(NOMER, ‘]’)-2, NOMER) as right
и слева:
substr (NOMER, (instr(NOMER, ‘=’)+2), lenght (NOMER)) as left
как все это слепить в одну строку?))
(номер всегда находится между символами разный текст[разный текст=’NOMER’]разный текст
Добрый день.
Спасибо за Ваш вопрос.
Если я правильно понял задачу, то можно следующим образом:
SELECT
substr (NOMER,
instr(NOMER, ‘=’)+1,
instr(NOMER, ‘]’) – instr(NOMER, ‘=’) -1)
FROM my_table