[firebase-br] RES: RES: Retirar Pontos, Barras e Traços de um campo
Sandro Souza
escovadordebits em gmail.com
Seg Set 14 14:59:24 -03 2009
Bom dia/tarde Daniel.
Grande Daniel, caso você deseje uma solução nativa, sem depender de uma UDF,
para poder até colocar a mesma base de dados em outra plataforma, sugiro a
seguinte stored procedure para remover qualquer máscara e retornar apenas os
dígitos do texto informado:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE SEM_MASCARA(
-- Texto com a máscara.
TEXTO VARCHAR(100)
)RETURNS(
-- Texto final, contendo apenas os dígitos, caso existam.
RESULTADO VARCHAR(100)
)AS
DECLARE VARIABLE INDICE INTEGER;
DECLARE VARIABLE CARACTER CHAR(1);
BEGIN
-- Não informou o texto?
IF (TEXTO IS NULL) THEN
-- Também sem resultado.
RESULTADO = NULL;
ELSE
BEGIN
-- Inicializa o resultado.
RESULTADO = TEXTO;
-- Inicializa o índice do laço.
INDICE = CHAR_LENGTH(RESULTADO);
-- Laço de remoção da máscara.
WHILE (INDICE > 0) DO
BEGIN
-- Obtém o próximo caracter a ser analisado.
CARACTER = CAST(SUBSTRING(RESULTADO FROM INDICE FOR 1) AS CHAR(1));
-- Não é um dígito?
IF (NOT(CARACTER BETWEEN '0' AND '9')) THEN
-- Remove o caracter atual.
RESULTADO = SUBSTRING(RESULTADO FROM 1 FOR (INDICE - 1)) ||
SUBSTRING(RESULTADO FROM (INDICE + 1) FOR
(CHAR_LENGTH(RESULTADO) - INDICE));
-- Avança para o caracter anterior.
INDICE = INDICE - 1;
END -- WHILE
END -- ELSE
-- Envia o resultado.
SUSPEND;
END^
SET TERM ; ^
Agora é só testar:
SELECT RESULTADO FROM SEM_MASCARA('111.111.111-0');
SELECT RESULTADO FROM SEM_MASCARA('1.2,3;4:5!6 em 7');
Espero ter ajudado mais que atrapalhado. :D
2009/9/14 Daniel (Vipa) <daniel em vipa.com.br>
> Valeu Jancarlos!
>
> É isso aí. Agora é só montar uma SP.
>
> Obrigado a todos que colaboraram!
>
> Sds,
>
> Daniel
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Jancarlos Martins
> Enviada em: segunda-feira, 14 de setembro de 2009 13:58
> Para: FireBase
> Assunto: Re: [firebase-br]RES: Retirar Pontos, Barras e Traços de um campo
>
> Tudo bem
> Daniel vamos lá,
>
> No Firebird tem os comandos que voce pode usar:
>
> retorna o tamanho da string
> STRLEN(<Texto>)
>
> copy de uma determinada quantidade de caracteres
> SUBSTRING(<Texto> FROM <Pos Inicial> FOR <Qtd Caracter>)
>
> e para finalizar um laço para concatenar as string
> WHILE <condicoes> DO
> BEGIN
> END
>
> so lembrando para concatenar Char ou Varchar "String"
>
> texto="primeira parte" || "segunda parte"
>
> agora ficou facil fazer o que voce quer. fui...
>
>
> Jancarlos P. Martins
> www.defence.com.br
>
> 2009/9/14 Daniel (Vipa) <daniel em vipa.com.br>
>
> > Grande Newton!!!
> >
> > Então... seria isso mesmo só que nativo no Firebird, ou seja, preciso
> saber
> > quais as funções DELETE e POS do Delphi no FireBird.
> >
> > Obrigado!
> >
> > Daniel
> >
> >
> >
> > -----Mensagem original-----
> > De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> > Em
> > nome de Newton
> > Enviada em: segunda-feira, 14 de setembro de 2009 11:57
> > Para: FireBase
> > Assunto: Re: [firebase-br]Retirar Pontos, Barras e Traços de um campo
> >
> > Usa esta :
> >
> > { excluir caractere especifico }
> > function DeletaCaract(texto, excluir : string ) : string;
> > begin
> >
> > while Pos(excluir, texto) > 0 do
> > Delete(texto, Pos(excluir, texto), 1);
> > result := texto;
> >
> > end;
> >
> > []s.
> > Newton
> > Tangará da Serra - MT
> > ----- Original Message -----
> > From: "Daniel (Vipa)" <daniel em vipa.com.br>
> > To: "'FireBase'" <lista em firebase.com.br>
> > Sent: Monday, September 14, 2009 10:42 AM
> > Subject: [firebase-br] Retirar Pontos, Barras e Traços de um campo
> >
> >
> > Bom Dia a todos!
> >
> > Já pesquisei sobre o assunto e não encontrei algo que possa me auxiliar
> na
> > seguinte situação:
> >
> > Tenho uma campo CPNJ que está sendo gravado com a máscara
> > 99.999.999/9999-99
> >
> > Preciso retirar os pontos, barras e traços. Existe alguma função ou algum
> > "atalho" para executar esta operação?
> >
> > Acho que já me auxiliaram com algo parecido aqui na lista, mas não
> consegui
> > encontrar, nem na lista e nem no Google.
> >
> > Se alguém puder um ajudar, ficarei muito grato.
> >
> > Sds,
> >
> > Daniel
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista