2010-02-12 5 views
3

J'ai une colonne dont les valeurs se composent d'un préfixe et une certaine valeur, .: par exempleComment couper une chaîne de préfixe dans une requête SQL Oracle?

ABC-Car 
ABC-Dog 
ABC-Suit 
CBR-Train 

Dans ma requête, je voudrais couper certains préfixes, par exemple si je rogné « ABC- » il me donne ce qui suit:

Car 
Dog 
Suit 
CBR-Train 

Le seul problème est, tous les caractères sont valables pour la partie après le préfixe. Il est donc possible que je pouvais avoir:

ABC-ABC-Cat 

Je veux que ce rogné la valeur de retour:

ABC-Cat 

Le TRIM et les fonctions LTRIM semblent utiliser modèle/caractère correspondant plutôt que chaîne correspondant à une seule fois. Y at-il un moyen d'accomplir ce que je veux avec l'une de ces fonctions ou avec une autre fonction intégrée? Actuellement, je pense que je vais devoir utiliser une instruction CASE pour vérifier ce préfixe au début de chaque valeur et si elle existe, SUBSTR le désactiver, sinon retourner la colonne inchangée. Espérant qu'il y a un moyen plus simple.

Répondre

4

regexp_replace est ce que vous voudrez utiliser pour cela.

Exemples d'utilisation:

select regexp_replace('ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'Car' 
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'ABC-Car' 
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'CBR-Train' 
+0

Une grande partie grâce, David. –

+1

Sachez que les fonctions regex sont 10g +. –

+0

@Ponies, on a parfois l'impression de me suivre: on arrive à toutes les questions SQL. :) +1 –

Questions connexes