Совместное применение функций LENGTH, SUBSTR и INSTR

Совместное применение функций 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

  1. Здравствуйте! Спасибо большое за статьи, благодаря им смог получше разобраться с sql. Но есть вопрос, возможно банальный. Слева и справа строку по отдельности я обрезаю. А как обрезать с обеих сторон одновременно?

    справа:
    nvl (substr (NOMER 0, instr(NOMER, ‘]’)-2, NOMER) as right
    и слева:
    substr (NOMER, (instr(NOMER, ‘=’)+2), lenght (NOMER)) as left
    как все это слепить в одну строку?))

    (номер всегда находится между символами разный текст[разный текст=’NOMER’]разный текст

    1. Добрый день.
      Спасибо за Ваш вопрос.

      Если я правильно понял задачу, то можно следующим образом:

      SELECT
      substr (NOMER,
      instr(NOMER, ‘=’)+1,
      instr(NOMER, ‘]’) – instr(NOMER, ‘=’) -1)
      FROM my_table

Leave a Reply

Your email address will not be published. Required fields are marked *