DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Calculando minutos ou segundos de um horário – SQL – Firebird

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!

Facebook Comments Box
  • Giovani Da Cruz
  • 3.751 views
  • 1 comentários
  • 4 de abril de 2020

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

Uma resposta para “Calculando minutos ou segundos de um horário – SQL – Firebird”

  1. Andradina Oliveira disse:

    parabéns

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados