



Queridos amigos da comunidade Show Delphi, tudo beleza?
Hoje vamos ver como contar os minutos ou segundos de um horário via SQL no Firdbird a partir de sua versão 3.0.
Primeiramente criei uma função interna para calcular os minutos de um horário,
com opção de truncar ou não.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | SET TERM ^ ; CREATE OR ALTER FUNCTION MINUTES_OF_TIME ( IN_TIME TIME, IN_TRUNC BOOLEAN) RETURNS DOUBLE PRECISION AS DECLARE variable VRESULT DOUBLE PRECISION; BEGIN /* Criado por Giovani Da Cruz */ VRESULT = EXTRACT(HOUR FROM :in_time) * 60; vresult = :vresult + EXTRACT(MINUTE FROM :in_time); IF (:in_trunc) THEN BEGIN RETURN vresult; END BEGIN vresult = :vresult + EXTRACT(SECOND FROM :in_time) / 60.00; RETURN vresult; END END ^ SET TERM ; ^ |
Também já criei outra função interna para calcular os segundos de um horário.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | SET TERM ^ ; CREATE OR ALTER FUNCTION SECONDS_OF_TIME ( IN_TIME TIME) RETURNS BIGINT AS DECLARE variable VRESULT DOUBLE PRECISION; BEGIN /* Criado por Giovani Da Cruz */ -- calculando as horas em minutos vresult = EXTRACT(HOUR FROM :in_time) * 60; -- adicionando os minutos avulsos vresult = :vresult + EXTRACT(MINUTE FROM :in_time); -- transformando em segundos vresult = :vresult * 60; -- adicionando os segundos avulsos vresult = :vresult + EXTRACT(SECOND FROM :in_time); RETURN vresult; END ^ SET TERM ; ^ |
Para testes pessoal, criei esta tabela
1 2 3 4 5 6 7 | CREATE TABLE TESTE ( CODIGO INTEGER NOT NULL, TEMPO_INICIO TIME NOT NULL, TEMPO_FIM TIME NOT NULL ); ALTER TABLE TESTE ADD CONSTRAINT PK_TESTE PRIMARY KEY (CODIGO); |
1 2 3 4 5 6 7 8 9 | Também vou disponibilizar um script para que você possa preencher a tabela com dados que utilizei no vídeo. INSERT INTO TESTE (CODIGO, TEMPO_INICIO, TEMPO_FIM) VALUES (1, '00:00:00', '02:30:00'); INSERT INTO TESTE (CODIGO, TEMPO_INICIO, TEMPO_FIM) VALUES (2, '01:17:37', '10:46:48'); INSERT INTO TESTE (CODIGO, TEMPO_INICIO, TEMPO_FIM) VALUES (3, '02:30:00', '21:00:10'); INSERT INTO TESTE (CODIGO, TEMPO_INICIO, TEMPO_FIM) VALUES (4, '00:30:00', '02:30:00'); |
Por fim, consigo obter os minutos e segundos de um campo time usando as funções, veja o exemplo:
1 2 3 4 5 6 | SELECT I.tempo_inicio, minutes_of_time(I.tempo_inicio, TRUE) AS MINUTOS_TRUNC, minutes_of_time(I.tempo_inicio, FALSE) AS MINUTOS_REAL, seconds_of_time(I.tempo_inicio) AS SEGUNDOS FROM teste i |
Agora pessoal, convido a assistir o vídeo, explicando o uso das funções deste post.
Dúvidas ou sugestões? Deixe o seu comentário.
Um abraço pessoal e até a próxima!
Você precisa fazer o login para publicar um comentário.
parabéns