Регулярное выражение - захват номера между подчеркиваниями в последовательности между запятыми - PullRequest
1 голос
/ 15 января 2020

У меня есть поле в таблице базы данных в формате:

111_2222_33333,222_444_3,aaa_bbb_ccc

Этот формат является единым для всего поля. Три значения разделенных подчеркиванием цифр c, запятая, еще три значения разделенных подчеркиванием цифр c, еще одна запятая, а затем три разделенных подчеркиванием текстовых значения. Без пробелов между

Я хочу извлечь среднее значение из второй последовательности цифр c, в приведенном выше примере я хочу получить 444

В SQL запрос, который я унаследовал, использовалось регулярное выражение ^.,(\d+)_.$, но это, похоже, ничего не дает.

Я попытался определить первую запятую, первое число после и следующее подчеркивание ,222_ для использовать в качестве отправной точки и оттуда получить следующий номер без _ после него

Этот (,\d*_)(\d+[^_]) выбирает ,222_444 и является ближайшим, который я получил

1 Ответ

0 голосов
/ 15 января 2020

Мы можем попробовать использовать REGEXP_REPLACE с группой захвата:

SELECT
    REGEXP_REPLACE( 
        '111_2222_33333,222_444_3,aaa_bbb_ccc',
        '^[^,]+,[^_]+_(.*?)_[^_]+,.*$',
        '\1') AS num
FROM yourTable;

Вот демонстрация, показывающая, что первая группа захвата приведенного выше регулярного выражения содержит желаемое количество.

Демо

...