[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