Regex, чтобы получить все между точкой и пробелом regexp_substr - PullRequest
0 голосов
/ 02 апреля 2019

В базе данных Oracle у меня есть строка, такая как 12.13 this is a test.Используя regexp_substr, я пытаюсь извлечь только 13.Это число после точки и перед пробелом.Я пробовал различные комбинации, и (string, '\.[0-9]{1,}') подходит ближе всего, но я все еще получаю .13Есть ли способ просто вернуть 13?

Данные также включают такие элементы, как 1.1.Максимум чисел: 99.99.

Все возможные числовые форматы: #.#, #.##, ##.#, ##.##

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Мне нравится regexp_replace лучше, чем regexp_substr для таких задач.

regexp_replace(str, '^.*?\.([[:digit:]]+).*$', '\1');

т.е. найдите строку wohle с начала, с некоторыми символами, точкой, несколькими цифрами, некоторыми символами до конца, но запомните только цифры и верните их вместо строки.

Но я думаю, это просто вопрос личных предпочтений.

1 голос
/ 02 апреля 2019

Учитывая, что входные строки всегда будут иметь начальные числа и точку, можно извлечь дробные числа с помощью regexp_substr. regexp_replace также может быть использовано.

Вот несколько примеров для regexp_substr. Они работают путем включения группы захвата, нацеленной на нужные данные, и аргумента subexpression (последний аргумент в regexp_substr):

SELECT REGEXP_SUBSTR('12.13 this is a test','^[0-9]{1,}[.]{1}([0-9]{1,})',1,1,NULL,1) AS FRACTIONAL FROM DUAL;

Результат:

FRACTIONAL
13

1 row selected.

SELECT REGEXP_SUBSTR('1.1 this is a test','^[0-9]{1,}[.]{1}([0-9]{1,})',1,1,NULL,1) AS FRACTIONAL FROM DUAL;

Результат:

FRACTIONAL
1

1 row selected.

SELECT REGEXP_SUBSTR('99.99 this is a test','^[0-9]{1,}[.]{1}([0-9]{1,})',1,1,NULL,1) AS FRACTIONAL FROM DUAL;

Результат:

FRACTIONAL
99

1 row selected.
0 голосов
/ 02 апреля 2019
select regexp_substr('12.13 this is a test', '\d+\.(\S+)', 1, 1, null, 1) rs
from dual;

RS
--
13
...