Разделение строки Oracle по разделителю

Обновлено: 20.11.2024

Этого можно добиться, разделив строку, разделенную запятыми, на отдельные строки и передав их в предложение IN. Oracle предоставляет функцию regexp_substr, которая удобна для этого сценария. Во-первых, мы сформируем запрос, который разбивает эту строку, разделенную запятыми, и выдает отдельные строки в виде строк.

Как разделить строку, разделенную запятыми?

Чтобы разделить строку запятой, используйте метод split() в Java. ул. разделить("[,]", 0);

Что такое Regexp_substr?

Функция REGEXP_SUBSTR используется для возврата подстроки, которая соответствует регулярному выражению в строке. Эта функция возвращает NULL, если совпадений не найдено. Эта функция может вернуть пустую строку, если регулярное выражение соответствует строке нулевой длины.

Что такое Regexp_replace в SQL?

Функция Oracle/PLSQL REGEXP_REPLACE является расширением функции REPLACE. Эта функция, представленная в Oracle 10g, позволит вам заменить последовательность символов в строке другим набором символов, используя сопоставление с шаблоном регулярного выражения.

Что возвращает Regexp_like?

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

Что такое Regexp_like в SQL?

Функция Oracle REGEXP_LIKE() — это расширенная версия оператора LIKE. Функция REGEXP_LIKE() возвращает строки, соответствующие шаблону регулярного выражения. Обратите внимание, что в стандарте SQL REGEXP_LIKE — это оператор, а не функция.

Как проверить, есть ли в столбце алфавиты в Oracle?

Ответ: Чтобы проверить строку на наличие буквенных символов, вы можете использовать комбинацию функций LENGTH, TRIM и TRANSLATE, встроенных в Oracle. Эта функция вернет нулевое значение, если строка1 является буквенной. Он вернет значение «больше 0», если строка1 содержит любые неалфавитные символы.

Что такое регулярное выражение в Oracle?

Условие Oracle REGEXP_LIKE позволяет выполнять сопоставление регулярных выражений в предложении WHERE операторов SELECT, INSERT, UPDATE или DELETE.

Можно ли использовать регулярное выражение в Oracle SQL?

В Oracle Database реализована поддержка регулярных выражений с помощью набора функций и условий Oracle Database SQL, которые позволяют выполнять поиск и обработку строковых данных. Вы можете использовать эти функции в любой среде, поддерживающей Oracle Database SQL.

Как проверить, содержит ли строка подстроку в Oracle?

Функция Oracle INSTR используется для поиска подстроки в строке и определения местоположения подстроки в строке. Если найдена подстрока, равная substring, то функция возвращает целое число, указывающее позицию первого символа этой подстроки.

Какое использование Regexp_substr в Oracle?

Описание. Функция Oracle/PLSQL REGEXP_SUBSTR является расширением функции SUBSTR. Эта функция, представленная в Oracle 10g, позволяет извлекать подстроку из строки с помощью сопоставления с шаблоном регулярного выражения.

Как проверить, находится ли строка в PL SQL?

Функция INSTR возвращает числовое значение. Первая позиция в строке равна 1. Если подстрока не найдена в строке, функция INSTR вернет 0.

Можем ли мы использовать Sysdate в ограничении проверки?

Нет, вы не можете использовать sysdate в проверочных ограничениях. Почему? Все строки в таблице для включенного ограничения должны возвращать true для его выражения. Но sysdate не является детерминированным.

Что такое подстрока и строка в SQL?

INSTR(PHONE, '-') дает индекс – в столбце PHONE, в вашем случае 4. а затем SUBSTR(PHONE, 1, 4 – 1) или SUBSTR(PHONE, 1, 3) дает подстроку столбца PHONE с 1-го, длина которого составляет 3 символа, что равно 362, если значение столбца PHONE равно 362-127-4285.

Чем отличаются подстрока () и подстрока ()?

Метод substr() извлекает части строки, начиная с символа в указанной позиции, и возвращает указанное количество символов. Метод substring() возвращает часть строки между начальным и конечным индексами или до конца строки.

Как получить подстроку?

Метод подстроки () строки JavaScript

  1. Извлечение символов из строки:
  2. Начните извлечение с позиции 2 и извлеките остальную часть строки:
  3. Если "начало" больше, чем "конец", два аргумента будут заменены местами:
  4. Если "начало" меньше 0, извлечение начнется с позиции индекса 0:
  5. Извлечь только первый символ:

Как обрезать первые 3 символа в SQL?

Удалить первый и последний символ из строки в SQL Server

  1. Использование левой и правой функций SQL.Объявить @name как varchar(30)='Rohatash' Объявить @n varchar(40) =left(@name, len(@name)-1) Select right(@n, len(@n)-1)
  2. Использование функций Substring и Len. Объявить @string varchar(50) SET @string=’rohatash’

Как мне получить последние 3 символа строки в SQL?

Функция SQL Server RIGHT()

  1. Извлечь 3 символа из строки (начиная справа): SELECT RIGHT(‘SQL Tutorial’, 3) AS ExtractString;
  2. Извлеките 5 символов из текста в столбце "CustomerName" (начиная справа):
  3. Извлечь 100 символов из строки (начиная справа):

Как мне получить первые 4 символа строки в SQL?

Функция SUBSTRING() SQL Server

  1. Извлечь 3 символа из строки, начиная с позиции 1: SELECT SUBSTRING(‘SQL Tutorial’, 1, 3) AS ExtractString;
  2. Извлеките 5 символов из столбца "CustomerName", начиная с позиции 1:
  3. Извлечь 100 символов из строки, начиная с позиции 1:

Как получить последний символ в SQL?

Сначала используйте LENGTH, чтобы найти длину строки. Затем используйте SUBSTR, чтобы получить всю строку, кроме LENGTH минус 1. SELECT SUBSTR(your_column, 0, LENGTH(your_column) – 1) FROM your_table; Это удалит последний символ из вашей строки.

Как удалить специальные символы из столбца в SQL?

1 ответ. Или вы можете создать функцию для удаления специальной функции char, а затем вызвать ее в инструкции Update. 1) Удаляет специальные символы из строкового значения. 2) Все символы, кроме 0-9, a-z и A-Z удаляются и 3) возвращаются оставшиеся символы.

Как найти первый символ строки в SQL?

SELECT SUBSTRING(Col_Name, 1, 1) AS ExtractString; Параметры, используемые в методе SUBSTRING, следующие: 1. Col_Name: требуется для извлечения строки.

Как мне получить первые 10 символов строки в SQL?

Код ответа «sql получить первые 10 символов»

  1. — Только для Oracle.
  2. — синтаксис.
  3. SUBSTR(строка>,1,символы>)
  4. — пример.
  5. SUBSTR(‘Бесполезные вещи’,1,10) — ВЫВОД: Бесполезная ул.

Как мне найти первые 5 цифр в SQL?

Функция SQL Server LEFT()

  1. Извлечь 3 символа из строки (начиная слева): SELECT LEFT(‘SQL Tutorial’, 3) AS ExtractString;
  2. Извлеките 5 символов из текста в столбце "CustomerName" (начиная слева):
  3. Извлечь 100 символов из строки (начиная слева):

Как найти строку в SQL?

В SQL Server вы можете использовать функцию T-SQL CHARINDEX() или функцию PATINDEX(), чтобы найти строку в другой строке.

Что возвращает Charindex, если он не найден?

Пример 3. Поиск позиции подстроки в указанной строке в SQL CHARINDEX. Он ищет подстроку в указанной строке. Если он получает точное совпадение с подстрокой, он возвращает начальную позицию подстроки. Если точное совпадение не найдено, в выходных данных возвращается 0.

Как выполнить отдельный запрос в SQL?

SELECT DISTINCT возвращает только отдельные (разные) значения. DISTINCT удаляет повторяющиеся записи из таблицы. DISTINCT можно использовать с агрегатами: COUNT, AVG, MAX и т. д. DISTINCT работает с одним столбцом… Введите приведенный ниже синтаксис SQL:

Типичный сценарий, включающий разбиение строки, разделенной запятыми, на строки:

  • в запросе на основе пользовательского интерфейса пользователь вводит список идентификаторов в поле ввода и
  • приложение должно получать сведения о входном списке идентификаторов

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

На первый взгляд это звучит достаточно просто: привяжите параметр к списку значений, разделенных запятыми, например "A1,A2,A4", а затем найдите соответствующие строки, используя SQL для этих идентификаторов.

Однако есть одна загвоздка.

Значение в строке != Значение в списке

Допустим, это данные таблицы:

… и нам нужно получить данные для идентификаторов A1, A2 и A4 из таблицы.

Пользователь вводит A1,A2,A4 на экране поиска, и приложение применяет его в SQL для сопоставления с данными в таблице.

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

Вместо этого SQL должен искать набор дискретных значений через предложение IN, как в…

Классическая проблема преобразования строки в строку

В поле ввода была введена строка: "A1, A2, A4".

«A1, A2, A4» как есть в SQL IN будет интерпретироваться как одна единица текста, а не как список дискретных значений «A1», «A2» и «A4».

Нам нужен способ преобразования текста, разделенного запятыми, в строки.
Как мы это делаем?
Есть несколько способов. В этой статье показан простой вариант с использованием комбинации REGEX_SUBSTR и CONNECT BY.

SQL: преобразование строки в строку

SQL, который дает нужный нам результат:

Фокус заключается в подзапросе, который преобразует входную строку "A1, A2, A4" в список дискретных значений "A1", "A2" и "A4".

Давайте рассмотрим решение более подробно.

Решение String to Rows: более пристальный взгляд

(1) REGEX_SUBSTR для сопоставления с образцом

REGEXP_SUBSTR — это функция регулярного выражения в Oracle, которая находит подстроку, соответствующую шаблону регулярного выражения в заданном тексте.

Синтаксис:
regex_substr(текст, шаблон, позиция, вхождение)

  • text : Исходная строка, в которой нужно искать шаблон.
    В этом примере – A1, A2, A3.
  • шаблон: регулярное выражение, соответствующее возвращаемой подстроке.
    [^,]+ в этом примере соответствует любой последовательности символов в тексте, не содержащей запятую.
  • position : Символ текста, с которого Oracle должен начать поиск. В этом примере мы начнем поиск с 1.
  • вхождение : N-е вхождение шаблона в исходной строке, которое будет возвращено.

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

Чтобы преобразовать всю строку в строки, должны быть возвращены *все* вхождения подстрок внутри запятых, поэтому нам нужен способ перебора 1..последних вхождений подстрок в SQL. Вот где в игру вступает CONNECT BY…

(2) CONNECT BY для генерации 1..N строки

Рекурсивный оператор CONNECT BY вместе с LEVEL можно использовать в качестве базового генератора строк 1..N.

Значение, возвращаемое уровнем, может использоваться для обозначения вхождения в REGEX_SUBSTR.

Соединяя и то, и другое, мы получаем…

REGEX_SUBSTR + CONNECT BY для строки, разделенной разделителями —> преобразование строк

Обзор

Строка, разделенная разделителями, может быть преобразована в набор строк в Oracle SQL с помощью комбинации функции регулярного выражения REGEX_SUBSTR и рекурсии через CONNECT BY. Эту функцию можно использовать для разделения одной входной строки с параметрами запроса, разделенными запятыми, на список значений.

Вопрос. Как разделить строку с разделителями-запятыми в Oracle? У меня есть строка, разделенная запятыми, и я хочу извлечь каждую строку в отдельную строку на основе разделителей-запятых. Каков наилучший способ извлечения строки с разделителями-запятыми в Oracle SQL?


Ответ: Вы можете использовать функции регулярных выражений Oracle для извлечения серии строк, разделенных запятыми. В следующем примере демонстрируется этот принцип извлечения строки, заключенной в запятые:

SQL> var input varchar2(150)
SQL>
SQL> exec :input := 'ABC/DEF,GHI/JKL,MNO/PQR'

Процедура PL/SQL успешно завершена.

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

выбрать regexp_substr (:input, '[^,]+',1, rownum) str
из двойного
подключиться по уровню

Получить подробные сведения о настройке Oracle

В знаменательную книгу "Настройка Oracle: исчерпывающий справочник, третье издание" добавлено более 800 страниц советов по настройке производительности от экспертов. Он содержит сценарии и инструменты для повышения производительности Oracle, и вы можете приобрести его со скидкой 40 % непосредственно у издателей.

Как пользоваться этим документом

Метод очистки

Поскольку все столбцы являются плавающими, в этом макете используется объявление clear:both в правиле нижнего колонтитула. Этот метод очистки заставляет .container понимать, где заканчиваются столбцы, чтобы показать любые границы или цвета фона, которые вы размещаете в .container. Если ваш дизайн требует, чтобы вы удалили нижний колонтитул из .container, вам нужно будет использовать другой метод очистки. Наиболее надежным будет добавить
или

после вашего последнего плавающего столбца (но до закрытия .container). Это будет иметь тот же очищающий эффект.

Замена логотипа

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

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

Чтобы удалить встроенные стили, убедитесь, что на панели "Стили CSS" установлено значение "Текущий". Выберите изображение и на панели «Свойства» панели «Стили CSS» щелкните правой кнопкой мыши и удалите свойства отображения и фона. (Конечно, вы всегда можете перейти непосредственно к коду и удалить там встроенные стили из изображения или заполнителя.)

Разбить столбец oracle sql на несколько столбцов (5)

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

Например, моя строка — F/P/O, и я ищу следующий результат:

Поэтому я хотел бы разделить строку самым дальним разделителем.
Примечание: некоторые из моих строк также являются F/O, для которых мой SQL ниже работает нормально и возвращает желаемый результат.

Я написал следующий SQL:

и результат:

Почему это происходит и как это исправить?

Поэтому я хотел бы разделить строку самым дальним разделителем.

Я знаю, что это старый вопрос, но это простое требование, для которого будет достаточно SUBSTR и INSTR. REGEXP по-прежнему медленнее и требует больше ресурсов ЦП, чем старые функции subtsr и instr.

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

Ваш подход был правильным, но вы пропустили start_position в INSTR. Если значение start_position отрицательное, функция INSTR отсчитывает количество символов start_position в обратном направлении от конца строки, а затем выполняет поиск в направлении начала строки.

Я добавляю это как новый ответ, так как он сильно отличается от моего предыдущего, который был классическим примером чрезмерно сложного мышления, ухудшающегося с каждой итерацией, и, таким образом, по-прежнему является хорошим примером этого! lol Иногда вам просто нужно почувствовать, когда вы слишком усложняетесь, и не бояться начать все сначала, но с другого пути!

Хорошо, проверьте это. Я вернулся к исходной точке и изучил нить в поисках узора. Будь то одна дорога или несколько (на самом деле этот дизайн с несколькими значениями в одном столбце нарушает базовые принципы моделирования данных и должен быть переработан, но кому не приходилось иметь дело с паршивым дизайном, над которым мы не имеем никакого контроля?), каждая дорога окружена знаки фунта. Моя мысль заключалась в том, чтобы перебрать строку с помощью регулярного выражения, заменив шаблон знака фунта через закрывающие круглые скобки тем, что находится внутри круглых скобок. Конечно, это оставляет знак фунта в конце, но мы уберем это позже. Обратите внимание, что REGEXP_REPLACE заменит все вхождения шаблона, если он будет найден, поэтому по умолчанию циклически проходит по всем дорогам, и его НАМНОГО легче поддерживать, чем отвратительную массу вложенных INSTR(), SUBSTR() :

Объяснение шаблона регулярного выражения:

Если указанная выше строка найдена, замените ее строкой "replace-with":

Тогда это немного быстро и грязно, но просто используйте RTRIM, чтобы удалить знак запятой-пробел-фунт в конце. Ва-ла! Вау.

Для этого вы хотите использовать regexp_substr(). Это должно работать для вашего примера:

Кстати, вот скрипт SQL.

Ой. Я пропустил часть вопроса, где говорится о последнем разделителе. Для этого мы можем использовать regex_replace() для первой части:

А вот и соответствующий скрипт SQL.

Получить значения, разделенные точкой с запятой, в отдельных столбцах в Netezza SQL

Простые SUBSTR и INSTR сделают эту работу:

Выбор значений между несколькими круглыми скобками в строке с помощью SQL-запроса

Одно решение, частично основанное на решении, на которое ссылается przemo_pl:

Если вы хотите снова собрать это в одну строку, это добавит еще одну морщину.

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