Они были протестированы для поиска строк
{'_id': /.*CM.*/} ||find _id where _id contains ->CM
{'_id': /^CM/} ||find _id where _id starts ->CM
{'_id': /CM$/} ||find _id where _id ends ->CM
{'_id': /.*UcM075237.*/i} ||find _id where _id contains ->UcM075237, ignore upper/lower case
{'_id': /^UcM075237/i} ||find _id where _id starts ->UcM075237, ignore upper/lower case
{'_id': /UcM075237$/i} ||find _id where _id ends ->UcM075237, ignore upper/lower case
Используйте regexp_substr()
, преобразуйте в десятичное число и сделайте сравнение:
where to_number(regexp_substr(eventname, '[0-9]+')) >= 200000
Используйте regexp_like
для поиска таких записей и to_number
для преобразования таких записей в число для сравнения:
SELECT str, CASE
WHEN REGEXP_LIKE(str, '^\d{1,6}) THEN CASE
WHEN TO_NUMBER(str) >= 200000 THEN 'more than 200000'
ELSE 'less than 200000'
END
ELSE str
END AS x_type
FROM (
SELECT 'Birthday' AS str FROM DUAL UNION
SELECT '200001' FROM DUAL
UNION SELECT '200000' FROM DUAL
) tests
\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