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
3 Réponses :
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;
Hey, je ne comprends toujours pas tout à fait, pouvez-vous me donner un exemple
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
où
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
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;
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.