Intereting Posts
Лучшая практика? открывать и закрывать несколько подключений или одно большое открытое соединение для ado.net Как вернуть имя и позицию игрока при поиске пользователей SQL Экспорт CLOB в текстовый файл с использованием Oracle SQL Developer Запрос SQL, Как выбрать сгенерированное поле в GROUP BY Производительность VIEW по сравнению с оператором SQL Вставка значения по умолчанию в качестве текущей даты + 30 дней в MySQL Как найти неисправность при ошибке преобразования varchar в int в SQL? Как проверить NULL или недействительно в запросе HQL Применение запроса mysql к каждой таблице в базе данных Как я могу проверить диапазон дат Именование первичных ключей «id» vs «something_id» в SQL обновить дублированный ключ с помощью JdbcBatchItemWriter Иерархические данные в Linq – параметры и производительность Использование параметра из формы в инструкции IN sql – обновить больше строк, чем я ожидал

Как получить часть строки, которая соответствует регулярному выражению в Oracle SQL

Допустим, у меня есть следующая строка: 'product = 1627; color = 45; size = 7' в некотором поле таблицы. Я хочу запросить цвет и получить 45.

С помощью этого запроса:

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?') "colorID" FROM DUAL; 

Я получил :

 colorID --------- color=45; 1 row selected 

,

Можно ли получить часть согласованной строки – 45 для этого примера?

Один из способов сделать это – с REGEXP_REPLACE. Вам нужно определить всю строку как шаблон регулярного выражения, а затем использовать только тот элемент, который вы хотите в качестве replace string . В этом примере ColorID является третьим образцом во всей строке

 SELECT REGEXP_REPLACE('product=1627;color=45;size=7' , '(.*)(color\=)([^;]+);?(.*)' , '\3') "colorID" FROM DUAL; 

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

Попробуйте что-то вроде этого:

 SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?'), '[[:digit:]]+') "colorID" FROM DUAL;