正则表达式以获取点和空格之间的所有内容regexp_substr

时间:2019-04-01 22:03:34

标签: oracle regexp-substr

在Oracle数据库中,我有一个字符串,例如12.13 this is a test。我正在使用regexp_substr尝试仅提取13。那是点后面和空格之前的数字。我尝试了各种组合,但(string, '\.[0-9]{1,}')最接近,但我仍然得到.13。有什么方法可以返回13吗?

数据还包括1.1之类的项目。数字最多为99.99

所有可能的数字格式为:#.##.####.###.##

3 个答案:

答案 0 :(得分:1)

鉴于输入字符串将始终具有前导数字和点,因此可以使用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.

答案 1 :(得分:1)

在这些任务上,我比regexp_replace更喜欢regexp_substr

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

即从头开始查找wohle字符串,其中包含一些字符,一个点,一些数字,一些字符,直到结尾,但请记住仅数字并返回这些数字而不是字符串。

但是我想这只是个人喜好问题。

答案 2 :(得分:0)

select regexp_substr('12.13 this is a test', '\d+\.(\S+)', 1, 1, null, 1) rs
from dual;

RS
--
13