首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串中找到第二组数字(SQL/PL-SQL)

在字符串中找到第二组数字(SQL/PL-SQL)
EN

Stack Overflow用户
提问于 2015-08-12 10:48:16
回答 3查看 854关注 0票数 3

我有一个字符串,它可能是以下类型的

代码语言:javascript
复制
string          expected result
15-th-rp         15
15/12-rp         12
15-12-th         12
4-5-6            5

现在,我必须找到数字,1)如果字符串只包含1位数集,那么将显示相同的数字。2)如果字符之间有多个数字集合,那么我必须找到第二组数字。请帮帮我。

代码语言:javascript
复制
  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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-12 11:30:12

我想这就是你想要的:

代码语言:javascript
复制
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     

使用聚结的好处是,它不会评估第二个(和随后的)参数,除非它们是必需的。

票数 8
EN

Stack Overflow用户

发布于 2015-08-12 11:30:35

您没有回答关于'_1_2'应该返回1还是2的问题,所以我假设您需要1

代码语言:javascript
复制
REGEXP_SUBSTR(data, '[0-9]+', REGEXP_INSTR(data, '[^0-9][0-9]')+1)

2获得_1_2的一种有点麻烦的方法(同时也处理_1 coping 1__)可能是…

代码语言:javascript
复制
REGEXP_SUBSTR(data || '_' || data, '[0-9]+', 1, 2)

SQL:http://sqlfiddle.com/#!4/a54bb/7

票数 0
EN

Stack Overflow用户

发布于 2015-08-12 11:33:25

分两步做。首先匹配模式的第一和第二次出现,然后只有在没有第二集(即为空)的情况下才显示第一组。

代码语言:javascript
复制
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;

返回结果:

代码语言:javascript
复制
DATA     RESULT
-------- ------
15-th-rp 15
15/12-rp 12
15-12-th 12
4-5-6    5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31963007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档