Oracle регулярное выражение для разделения чисел и единиц - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь извлечь числа и единицы из входной строки. Я был в состоянии извлечь номер, но не смог извлечь единицы.

WITH smpl AS 
(

    SELECT '8.23 ug/dL' str FROM DUAL UNION
    SELECT 'negative' FROM DUAL UNION
    SELECT '29.2 ' FROM DUAL UNION
    SELECT '0.2 E.U./dL' FROM DUAL UNION
    SELECT '-150 ng/mL' FROM DUAL 
)
SELECT 
    str, 
    regexp_substr(str, '\.*[[:digit:]]+\.*[[:digit:]]*') num
FROM smpl;

желаемый выход:

enter image description here

1 Ответ

1 голос
/ 24 февраля 2020

Я думаю, что это то, что вы хотите:

SELECT str, 
       nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', '\1'), str) as num,
       nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', '\2'), str) as unit
FROM smpl;

nullif() обрабатывает ситуацию, когда ничто не соответствует - возвращает NULL вместо полной строки.

Здесь - это дБ <> скрипка.

...