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

Sandro Souza escovadordebits em gmail.com
Qua Abr 24 23:03:08 -03 2013


Bom dia/tarde/noite Gladiston.

Estou desenvolvendo alguns sistemas em PHP, e nesse caso, quando
informo algum campo do tipo TIMESTAMP em um SELECT, a respectiva
função do PHP que retorna a linha/registro atual acaba retornando os
valores do tipo TIMESTAMP como strings SEMPRE no formato YYYY-MM-DD
HH:NN:SS (sendo que NN representam os minutos).

Eu poderia criar uma função em PHP para separar e recombinar essas
strings, formatando o TIMESTAMP para o nosso formato nativo
"DD/MM/YYYY" e "DD/MM/YYYY HH:NN:SS", mas preferi fazer isso como
stored procedures selecionáveis para ficar independente da linguagem
de programação utillizada.

Estou verificando a possibilidade de usar programas CGIs feitos em FPC
(Free Pascal Compiler) nesses meus sistemas por questão de
performance, já que PHP é totalmente interpretado, nunca ganhando do
seu equivalente em linguagem nativa, ou seja, assembly puro,
produzidos por linguagens como Pascal (FPC, GPC, Delphi, etc...), C e
C++.

Dessa forma, caso eu opte por migrar tudo para CGIs feitas em FPC, ou
qualquer outra linguagem de programação, eu não precisarei recriar a
mesma função de formatação na nova linguagem. Apenas utilizaria o que
eu já fiz dentro do banco de dados.

Daí, essa aparente "complexidade" acaba "simplificando" a minha vida. :D

Em 24/04/13, Gladiston Santana<gladiston em vidy.com.br> escreveu:
> Porque  precisa que sua SP retorne data no formato texto quando seria muito
> mais fácil retornar data(date) ou data-hora(timestamp) ?
> No meu entendimento voce criou um grau de complexidade ao converter data em
> texto quando é desnecessário porque o FB irá usar o formato do sistema ou o
> formato definido no seu programa. Eu só fiz isso que você fez uma vez na
> vida por achar que execute statement não aceitava :parametros , depois que
> descobri que dá, retirei essas conversões trabalhosas.
>
>
> Gladiston Santana
> Departamento de TI
> Grupo Vidy
> Tel (11) 4787-3122 ramal 228
> Rod. Régis Bittencourt 3360 - Km 272,5
> Taboão da Serra - SP - CEP: 06793-000
> Visite nosso site: www.vidy.com.br
> Visite também : www.expolabor.com.br
>
>
>
>
> Em 24 de abril de 2013 16:58, Sandro Souza
> <escovadordebits em gmail.com>escreveu:
>
>> 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
>> >
>> ______________________________________________
>> 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
>




Mais detalhes sobre a lista de discussão lista