0
votes

Utilisation de REGEXP dans Oracle

J'ai une colonne remplie avec ce type de données

330110092432102
330335091341402
330410092015901

Le problème est que je ne veux que les chiffres après le tiret la sortie souhaitée est

AR001-330110092522102
AR001-330335000041402
AR001-330410092999901

Comment utiliser REGEXP dans oracle pour accomplir cela

Le nom de la colonne est identifiant et le nom de la table est NSUS


1 commentaires

Bien que vous puissiez utiliser une fonction REGEXP, j'envisagerais d'utiliser les fonctions standard dans ce cas, car REGEXP peut ajouter beaucoup de temps système à votre requête et vous n'avez pas réellement BESOIN de la puissance des expressions régulières.


3 Réponses :


0
votes

L'expression rationnelle que vous recherchez est: - ([0-9]) + $

Cela signifie que vous recherchez à la fin de la chaîne un "-" et au moins un nombre. Le "$" représente à la fin de la chaîne.

Ensuite, pour obtenir votre numéro, utilisez $ 1 (c'est votre groupe de capture)

Utilisez ceci pour tester: https://regex101.com/r/f9kwXV/17

MODIFIER: Je suis Je ne sais pas si cela fonctionne de cette façon dans oracle. Exemple:

SELECT REGEXP_REPLACE ('AR001-330335000041402', '-([0-9])+$', '$1')
FROM dual;


1 commentaires

Hey, je ne comprends toujours pas tout à fait, pouvez-vous me donner un exemple



1
votes

Vous pouvez utiliser select regexp_substr avec '[^ -] + $' modèle comme:

with t(str) as
(select 'AR001-330110092522102' from dual)
select substr(str,instr(str,'-')+1,length(str)) as "Result String" from t

  • [^ -] indique le point de départ à l'exception du caractère (tiret) à l'intérieur la liste
  • $ Correspond à la fin d'une chaîne.
  • Correspond à une ou plusieurs occurrences.

Une autre option consisterait à utiliser regexp_replace :

select regexp_replace('AR001-330110092522102','(.*)\-(.*)','\2') as "Result String" from t 

En effet, vous pouvez également utiliser substr () , instr () et combinaison de fonctions length () pour extraire ces chaînes telles que

select regexp_substr('AR001-330110092522102','[^-]+$') as "Result String" from dual 

Démo


0 commentaires

1
votes

Vous pouvez utiliser une expression régulière très basique: . * Cela signifie "accepter tous les caractères" - il vous suffit de lui dire de commencer après le '-' dans la chaîne, dont vous pouvez obtenir la position en utilisant la fonction INSTR . Vous vous retrouvez donc avec:

SELECT REGEXP_SUBSTR(YOUR_COLUMN, '.*', INSTR(YOUR_COLUMN, '-')+1)
  FROM YOUR_TABLE;

db fiddle ici


0 commentaires