我有一个字符串,它可能是以下类型的
string expected result
15-th-rp 15
15/12-rp 12
15-12-th 12
4-5-6 5现在,我必须找到数字,1)如果字符串只包含1位数集,那么将显示相同的数字。2)如果字符之间有多个数字集合,那么我必须找到第二组数字。请帮帮我。
with a as (
select '15-th-rp' as data from dual
union all
select '15/12-rp' from dual
union all
select '15-12-th' from dual
union all
select '4-5-6' from dual
)
select regexp_substr(data,'[0-9]+',REGEXP_INSTR(data,'[/|-]')+1) from a;发布于 2015-08-12 11:30:12
我想这就是你想要的:
with a as (select '15-th-rp' data from dual union all
select '15/12-rp' data from dual union all
select '15-12-th' data from dual union all
select '4-5-6' data from dual)
select data,
coalesce(regexp_substr(data,'[0-9]+',1,2),
regexp_substr(data,'[0-9]+',1,1)) extracted_data
from a;
DATA EXTRACTED_DATA
-------- --------------
15-th-rp 15
15/12-rp 12
15-12-th 12
4-5-6 5 使用聚结的好处是,它不会评估第二个(和随后的)参数,除非它们是必需的。
发布于 2015-08-12 11:30:35
您没有回答关于'_1_2'应该返回1还是2的问题,所以我假设您需要1。
REGEXP_SUBSTR(data, '[0-9]+', REGEXP_INSTR(data, '[^0-9][0-9]')+1)从2获得_1_2的一种有点麻烦的方法(同时也处理_1 coping 1__)可能是…
REGEXP_SUBSTR(data || '_' || data, '[0-9]+', 1, 2)SQL:http://sqlfiddle.com/#!4/a54bb/7
发布于 2015-08-12 11:33:25
分两步做。首先匹配模式的第一和第二次出现,然后只有在没有第二集(即为空)的情况下才显示第一组。
with
a(data) as (
select '15-th-rp' from dual union all
select '15/12-rp' from dual union all
select '15-12-th' from dual union all
select '4-5-6' from dual
),
b(data, first, second) as (
select
data
,regexp_substr(data, '[[:digit:]]+')
,regexp_substr(data, '[[:digit:]]+', 1, 2)
from a
)
select data, nvl(second, first) as result from b;返回结果:
DATA RESULT
-------- ------
15-th-rp 15
15/12-rp 12
15-12-th 12
4-5-6 5https://stackoverflow.com/questions/31963007
复制相似问题