0
votes

REGEX pour obtenir des valeurs de colonne contenant un nombre supérieur à 200000

J'ai une exigence où il y a une colonne EVENTNAME qui peut contenir des textes comme BIRTHDAY mais aussi pour un événement OFFER spécial elle ne contiendra que des chiffres. Et j'ai besoin de trier deux types d'offres différents dont l'un est inférieur à 200 000 et le reste supérieur à 200 000.

Quelqu'un peut-il aider avec REGEXP_LIKE?


5 commentaires

Donnez-nous un échantillon des valeurs que vous avez dans cette colonne.


Il y a des chaînes comme BIRTHDAY , ANNIVERSARY , NEW_GIFT alors qu'il n'y a que des nombres de 6 caractères comme 100060 ou 200001 . Je dois obtenir ces lignes avec uniquement des nombres et des valeurs supérieures à 200000


Donc chiffres seulement et aucun autre caractère?


Pouvez-vous s'il vous plaît modifier la question au lieu d'écrire des informations importantes ici en tant que commentaire.


Voter pour fermer car ce que vous demandez n'est pas clair.


3 Réponses :


2
votes

Utilisez regexp_substr () , convertissez en décimal et faites la comparaison:

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


0 commentaires

1
votes

Utilisez regexp_like pour trouver de telles entrées et to_number pour convertir ces entrées en nombre à des fins de comparaison:

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 commentaires

2
votes

\ D correspond à des caractères non chiffrés, vous pouvez donc faire ceci:

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

Résultat:

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

p >


0 commentaires