[firebase-br] RES: RES: Retirar Pontos, Barras e Traços de um campo
Herminio E. Piram
herminiopiram em gmail.com
Qui Out 29 13:34:56 -03 2009
Ola pessoal, estou revivendo o post...
Como usaria esta procedure passando para ela uma coluna de uma tabela?
Tentei passar para ela um subselect, mas deu erro.
Tenho uma tabela onde o campo codigo é declarado como varchar,
e alguns registros possuem /, -, _, etc... e gostaria de tirar estes caracteres
e usar somente numeros.
select resultado from sem_mascara (select campo from tabela)
can't format message 13:896 -- message system code -4.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 36.
select.
Obrigado pela atenção.
2009/9/14 Sandro Souza <escovadordebits em gmail.com>:
> 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
>>
> ______________________________________________
> 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
>
--
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _
"If the doors of perception were cleansed everything
would appear to man as it is, infinite." (William Blake)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _
Mais detalhes sobre a lista de discussão lista