Página 1 de 1

SUBSTR NEGATIVO

Enviado: Qui, 21 Ago 2008 9:18 am
por dudu0566
Galera dei uma procurada nos posts mas não encontrei a resposta para meu problema.

É o seguinte, tenho um campo (string) e gostaria de a partir do final dele encontrar um caracter e retornar tudo que viesse depois dele.
O problema que esse caracter pode repetir dentro do campo, e eu necessito que seja o primeiro a partir do final.
Ex.

Selecionar tudo

'1234X47545445X411245X1474125X2546'
O caracter é o 'X', então deveria retornar '2546'.
Estou tentando usar o substr, mas como as posições dos caracteres são variáveis não estou conseguindo.....

Alguém poderia me ajudar????

Enviado: Qui, 21 Ago 2008 9:34 am
por dr_gori
Acompanhe a linha de raciocínio:

1. Vamos criar uma variavel "V" no sql*plus:

Selecionar tudo

SQL> var v varchar2(200);
2. Setamos o valor que você quer nela:

Selecionar tudo

SQL> begin
  2    :v := '1234X47545445X411245X1474125X2546';
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> print

V
---------------------------------------------------------
1234X47545445X411245X1474125X2546

SQL> 

3. O Instr procura numa string uma outra (no caso, o X), e retorna a posição encontrada:

Selecionar tudo

SQL> select instr( :v , 'X' ) from dual;

INSTR(:V,'X')
-------------
            5
4. Dá pra forçar ele a buscar A PARTIR de uma determinada posição! (no caso abaixo, a partir da 6 posição)

Selecionar tudo

SQL> select instr( :v , 'X', 6 ) from dual;

INSTR(:V,'X',6)
---------------
             14
5. Pra terminar, ele busca de tras pra frente, mas daí tem que botar negativo!

Selecionar tudo

SQL> select instr( :v, 'X', -1 ) from dual;

INSTR(:V,'X',-1)
----------------
              29
6. Com base nisso, fazemos o substr a partir dessa posição:

Selecionar tudo

SQL> select substr( :v, INSTR(:V,'X',-1) ) from dual;

SUBSTR(:V,INSTR(:V,'X',-1))
---------------------------------------------------------
X2546

SQL> select substr( :v, INSTR(:V,'X',-1)+1  ) from dual;

SUBSTR(:V,INSTR(:V,'X',-1)+1)
---------------------------------------------------------
2546

SQL> 
OUTRAS REFERENCIAS:
http://glufke.net/oracle/viewtopic.php?t=753
http://glufke.net/oracle/viewtopic.php?t=3301

:-o

Enviado: Qui, 21 Ago 2008 1:37 pm
por dudu0566
valeu..... deu certo....

Abraço