[firebase-br] FORMATAR A DATA PARA TODA A BASE DE DADOS

Sandro Souza escovadordebits em gmail.com
Qua Abr 24 16:58:56 -03 2013


Bom dia/tarde/noite Mário.

Geralmente, eu uso a função EXTRACT e concateno as partes no formato que eu
quero.
Criei algumas stored procedures selecionáveis para formatar valores do tipo
TIMESTAMP para alguns formatos.

Por exemplo:

SET TERM ^ ;
--
CREATE PROCEDURE GLB_FORMATA_DATA(
  DATA TIMESTAMP)
RETURNS(
  RESULTADO VARCHAR(10))
AS
BEGIN
  -- Sem data?
  IF(DATA IS NULL)THEN
    -- Sem resultado tambem.
    RESULTADO = NULL;
  ELSE
    -- Converte a data p/ texto no formato brasileiro.
    RESULTADO = (LPAD(EXTRACT(DAY FROM DATA), 2, '0') || '/' ||
                 LPAD(EXTRACT(MONTH FROM DATA), 2, '0') || '/' ||
                 LPAD(EXTRACT(YEAR FROM DATA), 4, '0'));
  -- Retorna o resultado.
  SUSPEND;
END^
--
COMMIT^
--
COMMENT ON PROCEDURE GLB_FORMATA_DATA IS 'Retorna a data formatada pela
mascara "dd/mm/aaaa".'^
COMMIT^
--
COMMENT ON PARAMETER GLB_FORMATA_DATA.DATA IS 'Data a ser formatada.'^
COMMIT^
--
COMMENT ON PARAMETER GLB_FORMATA_DATA.RESULTADO IS 'String contendo a data
formatada.'^
COMMIT^
--
CREATE PROCEDURE GLB_FORMATA_DATAHORA(
  DATAHORA TIMESTAMP)
RETURNS(
  RESULTADO VARCHAR(19))
AS
DECLARE VARIABLE INDICE INTEGER;
BEGIN
  IF (DATAHORA IS NULL) THEN
    RESULTADO = NULL;
  ELSE
  BEGIN
    RESULTADO = EXTRACT(SECOND FROM DATAHORA);
    INDICE = POSITION('.' IN RESULTADO);
    IF (INDICE > 0) THEN
      RESULTADO = SUBSTRING(RESULTADO FROM 1 FOR(INDICE - 1));
    RESULTADO = LPAD(EXTRACT(DAY FROM DATAHORA), 2, '0')||'/'||
                LPAD(EXTRACT(MONTH FROM DATAHORA), 2, '0')||'/'||
                LPAD(EXTRACT(YEAR FROM DATAHORA), 4, '0')||' '||
                LPAD(EXTRACT(HOUR FROM DATAHORA), 2, '0')||':'||
                LPAD(EXTRACT(MINUTE FROM DATAHORA), 2, '0')||':'||
                LPAD(RESULTADO, 2, '0');
  END -- ELSE
  SUSPEND;
END^
--
COMMIT^
--
COMMENT ON PROCEDURE GLB_FORMATA_DATAHORA IS 'Retorna a data/hora formatada
pela mascara "dd/mm/aaaa hh:mi:ss".'^
COMMIT^
--
COMMENT ON PARAMETER GLB_FORMATA_DATAHORA.DATAHORA IS 'Data/hora a ser
formatada.'^
COMMIT^
--
COMMENT ON PARAMETER GLB_FORMATA_DATAHORA.RESULTADO IS 'String contendo a
data/hora formatada.'^
COMMIT^
--
SET TERM ; ^

Sempre que preciso obter um campo data (timestamp) formatado, eu faço algo
do tipo:

SELECT (SELECT RESULTADO FROM GLB_FORMATA_DATA(CAMPO_DATA))CAMPO_DATA, ....

No caso de data e hora, eu faço algo do tipo:

SELECT (SELECT RESULTADO FROM
GLB_FORMATA_DATAHORA(CAMPO_DATAHORA))CAMPO_DATAHORA, ....

Ou seja, já fica tudo tratado no banco de dados.

Espero ter ajudado mais que atrapalhado. :D



Em 24 de abril de 2013 10:51, Mário Reis <mariodosreyx em gmail.com> escreveu:

> Olá pessoal
>
>
>
> Há alguma forma de formatar a data do nosso Banco de Dados FIREBIRD-2.5.1?
>
> Qualquer coisa como SET DATE FORMAT TO YYYY-MM-DD?
>
> Estive a ver na documentação e não encontro nada.
>
> Também dei uma grande volta pela NET, e encontrei para outras databases,
> para n/ Firebird nada!?!
>
> E, isto dava um grande jeito porque salvo melhor opinião, deixaria de
> importar que formato usamos no Windows! Certo?
>
> Alguém pode ajudar?
>
> Obrigado
>
> Mário Reis
>
>
> ______________________________________________
> 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