REGEXP для получения значений столбца, который содержит число больше 200000 - PullRequest
0 голосов
/ 18 января 2019

У меня есть требование, если есть столбец EVENTNAME, который может содержать тексты вроде BIRTHDAY, но также для специального события OFFER он будет содержать только цифры. И мне нужно отсортировать два разных типа предложений, одно из которых меньше 200000, а другое больше 200000.

Может кто-нибудь помочь с REGEXP_LIKE?

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Используйте 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
0 голосов
/ 18 января 2019

\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
0 голосов
/ 18 января 2019

Используйте regexp_substr(), преобразуйте в десятичную и сделайте сравнение:

where to_number(regexp_substr(eventname, '[0-9]+')) >= 200000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...