我有一个要求,即在EVENTNAME列中可能包含BIRTHDAY之类的文本,但对于特殊的OFFER事件,它也将仅包含数字。 而且我需要对两种不同类型的报价进行排序,其中一种类型的报价小于200000,其他类型的报价大于200000。
有人可以帮助一些REGEXP_LIKE吗?
答案 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