[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