Dúvida: Manipulação de String

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
xx1rafa1xx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 25 Abr 2012 10:22 am

Olá Meus Caros,

Tenho uma pequena dúvida, estou consultando uma coluna de 2 tabelas (nota fiscal e itens da nota fiscal), porém quero pegar somente parte da string que possuo nessa coluna para comparar as informações com outra coluna de outra tabela, mas tem uma situação que me pegou de surpresa.

Segue my query:

Selecionar tudo

SELECT SUBSTR(inf.dsc_item,8,3)
FROM   nota_fiscal               nf,
            item_nota_fiscal      inf,
WHERE nf.nro_ntf    = inf.nro_ntf
and nf.nro_ntf          = 1
and nf.nro_serie_ntf = 2
O que fiz ai foi que peguei uma descrição de um item da nota, para pegar uma númeração única que sempre fica nesta posição, porém, dependente do item ele resulta em:
44 e 4, mas se eu pegar como fiz a substr ali, ele pega após o 4 que vem um hífem (-)
ai resulta os itens, o 44 e o 4-, como posso proceder para pegar o 44 e somente o 4 na mesma query?

Alguma sugestão?

Grato à todos desde já.
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

Parceiro,

pode utilizar a função instr()


http://www.techonthenet.com/oracle/functions/instr.php

Abraço
xx1rafa1xx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 25 Abr 2012 10:22 am

Opa, beleza Brigadão Leandro.

Mas tipo, utilizo o instr mesmo querendo somente os números?

Abraço.
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

Isso,

O INSTR te retorna a posição de um caractere desejado...

então, levando em conta que o seu hífen é padrão depois dos números, você terá a posição dele.

bom, essa ainda não é a solução dos seus problemas, porque o SUBSTR terá como resultado o valor desde início da sua string até a posição do hífen... Acredito que no caso de apenas 1 número, esse resultado será a posição 9.

Para solucionar, você terá que criar uma lógica pra trazer a posição do primeiro caractere numérico até o hífen. Com isso saberá qts caracteres existem do número até chegar ao hífen... E poderá selecionar apenas os números...

Att,
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Na versão 10g em diante, é possível resolver o problema com expressões regulares:

Selecionar tudo

with teste as (select '44- item 1' item from dual union all select '4- item 2' from dual union all select '3123721 - item nnnn' from dual )

select item, regexp_replace( item, '^(\d*?)\D.*$', '\1' ) from teste
/
| ITEM                | REGEXP_REPLACE(ITEM,'^(\D*?)\D |
| 44- item 1          | 44                             |
| 4- item 2           | 4                              |
| 3123721 - item nnnn | 3123721                        |

xx1rafa1xx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 25 Abr 2012 10:22 am

Opa beleza, Consegui fazer usando os 2 conceitos, muito obrigado galera ajudou bastante.

Abraços :o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes