[firebase-br] Função DIGITS(), alguma maneira de contornar sua ausencia?

Firebase firebase em dominioinf.com.br
Seg Dez 12 14:20:43 -03 2016


Boa tarde Mario,

A função isDigits não foi sugestão minha, e ainda não estou familiarizado 
com a Versão 3.0 do firebird.

Acredito que outros colegas poderão lhe ajudar mais...

Grato

-----Mensagem Original----- 
From: Mário Reis
Sent: Sunday, December 11, 2016 10:26 PM
To: FireBase
Subject: Re: [firebase-br] Função DIGITS(), alguma maneira de contornar sua 
ausencia?

Bom dia Rodrigo,

Uma questão não meramente académica!
Estava seguro do suporte BOOLEAN a partir do Fb3.0 que fui logo tentar
tentar implementar a tal função "IsDigit", mas para minha surpresa não
consigui fazê-lo Retornar FALSE ou TRUE, e parecia tão óbvio! Que estará a
faltar?  Segue o código(a retornar INTEGER 1,2 ou 3) :
CREATE FUNCTION ISDIGIT(
  IN_TEXTO VARCHAR(100))
RETURNS INTEGER
AS
DECLARE VARIABLE CH CHAR(1) COLLATE PXW_INTL850;
DECLARE VARIABLE I SMALLINT;
DECLARE VARIABLE J SMALLINT;
DECLARE VARIABLE RETORNA SMALLINT;
BEGIN

I = 1 ;
RETORNA = 3;
J= CHAR_LENGTH( TRIM(:IN_TEXTO) );

WHILE ( I <= J )  DO
BEGIN

  CH = SUBSTRING(:IN_TEXTO FROM I FOR 1);
  IF ( :CH NOT IN ('0','1','2','3','4','5','6','7','8','9') ) THEN
   BEGIN
    RETORNA = 2;   -- FALSE
    BREAK;
   END
  ELSE
   RETORNA = 1 ;   -- TRUE

  I = I + 1;

END

RETURN RETORNA;

END;

Alguém faz ideia porquê? Obrigado

Com os meus melhores cumprimentos
Mário Agostinho Reis

Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.

2016-12-09 10:29 GMT-01:00 Firebase <firebase em dominioinf.com.br>:

> Bom dia, Contornei esse problema criando uma procedure:
>
> CREATE PROCEDURE PROC_DIGITOS (
>  TEXTO VARCHAR(100)
> )
> RETURNS (
>  RETORNO VARCHAR(100)
> )
> AS
> DECLARE VARIABLE CH CHAR(1);
> BEGIN
> Retorno = '';
> WHILE (Texto IS NOT NULL AND Texto <> '') DO
> BEGIN
> Ch = SUBSTRING(Texto FROM 1 FOR 1);
> IF (Ch >= '0' AND Ch <= '9') THEN
> Retorno = Retorno || Ch;
> Texto = SUBSTRING(Texto FROM 2 FOR 100);
> END
> SUSPEND;
> END
> ;
>
> E executa dessa forma:
> SELECT C.NOME, C.ENDERECO, (select * from PROC_DIGITOS(C.TELEFONE)) AS
> TELEFONE FROM CLIENTES C
>
> Não sei se é bem isso que vc precisa, mas espero ter ajudado.
>
> Grato
>
> Rodrigo
>
> -----Mensagem Original----- From: Gladiston Santana
> Sent: Monday, November 07, 2016 12:03 PM
> To: FireBase
> Subject: [firebase-br] Função DIGITS(), alguma maneira de contornar sua
> ausencia?
>
> Olá pessoal,
>
> Estou importando dados de um outro banco de dados, e para evitar
> duplicações tenho que conferir se um telefone já não foi importado antes. 
> O
> problema é que a forma como o telefone foi armazenado permite duplicações
> como 11-555-9090, (11)555-9090 e 115559090 então precisaria usar uma 
> função
> chamada DIGITS que existe em outros bancos de dados que retorna de uma
> string apenas os digitos numericos e então importar os que não existem ou
> excluir os que são repetidos.
>
> O Firebird não possui tal função, ou talvez ela exista de outra forma,
> alguém aqui lista já precisou disso e conseguiu resolver essa questão?
>
> Se não houver, vou tem que pensar numa procedure e quebrar a cabeça por
> algo que parece ser simples.
> ______________________________________________
> 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://www.firebase.com.br/pes
> quisa_lista.html
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
>
>
> ______________________________________________
> 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://www.firebase.com.br/pes
> quisa_lista.html
>
______________________________________________
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://www.firebase.com.br/pesquisa_lista.html 


---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus





Mais detalhes sobre a lista de discussão lista