REGEXP获取包含大于200000的数字的列值

时间:2019-01-18 13:40:27

标签: sql regex oracle

我有一个要求,即在EVENTNAME列中可能包含BIRTHDAY之类的文本,但对于特殊的OFFER事件,它也将仅包含数字。 而且我需要对两种不同类型的报价进行排序,其中一种类型的报价小于200000,其他类型的报价大于200000。

有人可以帮助一些REGEXP_LIKE吗?

3 个答案:

答案 0 :(得分:2)

使用regexp_substr(),转换为小数,然后进行比较:

where to_number(regexp_substr(eventname, '[0-9]+')) >= 200000

答案 1 :(得分:2)

\D匹配非数字字符,因此您可以这样做:

with t(id, eventname) as (
    select 1, 'BIRTHDAY' from dual union all
    select 2, '4040404'  from dual union all
    select 3, '404'      from dual union all
    select 4, '404 PQR'  from dual union all
    select 5, 'NAMEDAY'  from dual )
select t.*, 
       case 
         when regexp_like(eventname, '\D')  then 'OTHER'
         when to_number(eventname) > 200000 then 'OFFER OVER 200'
         else 'OFFER BELOW 200'
       end type
  from t

结果:

    ID EVENTNAME TYPE
------ --------- ---------------
     1 BIRTHDAY  OTHER
     2 4040404   OFFER OVER 200
     3 404       OFFER BELOW 200
     4 404 PQR   OTHER
     5 NAMEDAY   OTHER

答案 2 :(得分:1)

使用if查找此类条目,并使用regexp_like将此类条目转换为数字以进行比较:

to_number