2010-06-24 9 views
0

Oracle 8 SQL: J'ai des données comme "VTR 564-31/V16 H12 W08 E19 L14" à partir de laquelle je veux couper la deuxième partie => " VTR 564-31"Oracle 8, SQL: RTRIM pour la manipulation de chaînes ne fonctionne pas comme prévu

Selon this website I peut utiliser la fonction rtrim

rtrim ('123000', '0'); renverrait '123'

comme cela fonctionne, mais adapté à mon cas d'utilisation, le suivant ne coupe pas du tout? Dois-je échapper au personnage spécial ???

rtrim ('VTR 564-31/V16 H12 W08 L14 E19', '/')

Répondre

2

RTRIM supprime les caractères indiqués dans le second paramètre à partir de la fin de la chaîne spécifiée dans le premier. Comme le dernier caractère de «VTR 564-31/V16 H12 W08 E19 L14» est un «4», qui n'est pas spécifié dans le deuxième paramètre «/», il n'y a rien à couper.

On dirait que vous pensez qu'il recherche la première occurence de '/' dans la première chaîne et supprime tout à partir de là, mais ce n'est pas ce qu'il fait.

Par exemple:

SQL> select rtrim('AAABBBCCCBBBAAA','AB') from dual; 

RTRIM('AA 
--------- 
AAABBBCCC 

RTRIM enlevé tous les As et hôtes de la fin de la chaîne.

probablement ce que vous voulez réellement est:

select substr(yourstring, 1, instr(yourstring, '/')-1) from dual; 

à savoir utiliser INSTR pour localiser la position de «/» puis SUBSTR pour obtenir seulement la partie de « yourString » avant.

+0

Vous êtes le seul, merci beaucoup! – Werner

1

Ce que vous voulez est quelque chose comme:

SELECT RTRIM(SUBSTR('VTR 564-31/V16 H12 W08 E19 L14',1,INSTR('VTR 564-31/V16 H12 W08 E19 L14','/')-1),' ') 
FROM DUAL; 

La fonction INSTR localise le «/» dans votre valeur de chaîne, la fonction SUBSTR extrait les caractères du début de la chaîne au caractère immédiatement avant la '/'situé par INSTR, tandis que le RTRIM supprime tous les espaces qui se sont produits avant le'/'