[firebase-br] Problemas na conversão TimeStamp para Char

Sandro Souza escovadordebits em gmail.com
Qui Jun 18 11:58:34 -03 2009


Bom dia/tarde Junior.

Grande Junior, aqui vai a minha humilde sugestão:

Precisaremos de uma stored procedure que retorne a posição de um caracter ou
substring dentro de uma string.

Como sugestão, forneço esse exemplo de código fonte que cria a stored
procedure FBSTRPOS que retorna a posição inicial de uma substring (SUBTEXTO)
dentro de outra string (TEXTO), onde o resultado zero indica que a substring
não foi encontrada, 1 indica que a substring foi encontrada a partir do
primeiro caracter do texto e assim por diante:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE FBSTRPOS(
  TEXTO VARCHAR(2048),
  SUBTEXTO VARCHAR(2049)
)RETURNS(
  POSICAO INTEGER
)AS
BEGIN
  -- Inicializa o resultado.
  POSICAO = 0;
  -- Informou um texto e subtexto a serem processados?
  -- O subtexto esta contido no texto?
  IF ((TEXTO IS NOT NULL)AND
      (SUBTEXTO IS NOT NULL)AND
      (TEXTO LIKE ('%' || SUBTEXTO || '%'))) THEN
  BEGIN
    -- Reinicializa o resultado.
    POSICAO = 1;
    -- Transforma o subtexto em uma mascara de pesquisa.
    SUBTEXTO = SUBTEXTO || '%';
    -- Laco de pesquisa de subtexto.
    WHILE ((NOT(TEXTO LIKE SUBTEXTO))) DO
    BEGIN
      -- Esta mais a frente.
      POSICAO = POSICAO + 1;
      -- Aumenta a mascara.
      SUBTEXTO = '_' || SUBTEXTO;
    END -- WHILE
  END -- IF
  -- Envia o resultado.
  SUSPEND;
END^

SET TERM ; ^

Agora, onde é:

MYSQL = MYSQL || 'AND NFE_DTMOVIMENTO = ''' || CAST(IN_DATA_MOVI AS
CHAR(30)) || '''';

Passaria a ser:

DATAHORA = CAST(IN_DATA_MOVI AS VARCHAR(30));
MYSQL = MYSQL || 'AND(NFE_DTMOVIMENTO = ''' || SUBSTRING(DATAHORA FROM 1 FOR
(FBSTRPOS(DATAHORA, '.') - 1)) || '''';

Onde DATAHORA seria outra variável do tipo VARCHAR(30).

É apenas uma sugestão.

Espero ter ajudado mais que atrapalhado. :D

2009/6/18 Junior Miranda <jrmiran em gmail.com>

> Bom dia a todos
>
> tenho a seguinte data hora num campo da tabela 18/6/2009 08:54:32.(campo
> timestamp)
>
> quando faço a conversão
> MYSQL    = MYSQL || ' AND NFE_DTMOVIMENTO = '''|| CAST(IN_DATA_MOVI AS
> CHAR(30)) || '''';
>
> O valor do campo  passado como parâmetro fica 18/6/2009 08:54:32.0000
>
> Seria alguma coisa relacionada aos milisegundos ?
>
> O problemas é que 18/6/2009 08:54:32.0000 não é encontrado tabela que está
> 18/6/2009 08:54:32
>
> Como resolver ?
>
> Nesta sp uso o EXECUTE STATEMENT.
>
> []'s
> ______________________________________________
> 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