用于拆分数字和单位的 Oracle 正则表达式
Oracle regexp to split numbers and units
我正在尝试从输入字符串中提取数字和单位。我能够提取数字,但无法提取单位。
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;
期望的输出:
我认为这符合您的要求:
SELECT str,
nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as num,
nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as unit
FROM smpl;
nullif()
处理没有匹配的情况——返回 NULL
而不是完整的字符串。
Here 是一个 db<>fiddle.
我正在尝试从输入字符串中提取数字和单位。我能够提取数字,但无法提取单位。
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;
期望的输出:
我认为这符合您的要求:
SELECT str,
nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as num,
nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as unit
FROM smpl;
nullif()
处理没有匹配的情况——返回 NULL
而不是完整的字符串。
Here 是一个 db<>fiddle.