Bóson Treinamentos em Ciência e Tecnologia

Cláusula BETWEEN e tipos de Hora no SQL Server

Cláusula BETWEEN com tipos TIME e DATETIME no SQL Server

Cláusula BETWEEN e tipos de Hora no SQL Server

A cláusula BETWEEN nos permite retornar intervalos de dados especificados em um filtro na cláusula WHERE quando executarmos uma consulta SQL.

Uma aplicação comum da cláusula BETWEEN é o retorno de registros de vendas contidos dentro de um intervalo de datas escolhido pelo usuário. Mas também é possível usar a cláusula BETWEEN para trabalhar com intervalos de hora, por exemplo com o tipo TIME.

Exemplo

Para nossos exemplos vamos criar uma tabela chamada tblAgenda, que conterá os campos ID, Compromisso e Hora, com os tipos SMALLINT, VARCHAR e TIME, respectivamente. Logo após, vamos inserir alguns registros de atividades em nossa agenda:

CREATE TABLE tblAgenda (
  ID SMALLINT PRIMARY KEY IDENTITY,
  Compromisso VARCHAR(60) NOT NULL,
  Hora TIME
);

INSERT INTO tblAgenda (Compromisso, Hora)
VALUES
('Acordar','05:00'),
('Academia','06:00'),
('Ir ao Trabalho','07:30'),
('Almoço com Cliente','12:40'),
('Reunião com Chefia','15:30'),
('Fim do Expediente','17:00'),
('Consulta com Dentista','17:30'),
('Cinema','19:00'),
('Jantar em Casa','21:15'),
('Assistir Netflix','22:00'),
('Hora de Dormir','23:30');

Vejamos os dados cadastrados na tabela de agenda:

SELECT * FROM tblAgenda;

Vamos agora realizar algumas consultas usando a cláusula BETWEEN para filtrar os dados de acordo com critérios de horário. Por exemplo, vamos retornar todos os dados dos compromissos agendados no intervalo entre 07:00 da manhã e 17:00, inclusive:

SELECT *
FROM tblAgenda
WHERE Hora BETWEEN '07:00' AND '17:00';

Outro exemplo: vamos verificar quais compromissos ainda temos no restante do dia. Para isso vamos passar o horário atual (são 15:28 agora aqui no escritório!) para a cláusula BETWEEN com a função GETDATE():

SELECT *
FROM tblAgenda
WHERE Hora BETWEEN CONVERT(time, GETDATE()) AND '23:59';

BETWEEN com tipo DATETIME

E se o tipo for DATETIME em vez de TIME? Já vimos como trabalhar com a cláusula BETWEEN e datas com DATETIME anteriormente. Mas, e se precisarmos incluir também a hora no filtro de intervalos?  Neste caso teríamos a informação de data armazenada juntamente com o horário no dado deste tipo.

Suponhamos que me vez de usar o tipo TIME tivéssemos empregado o tipo DATETIME na nossa tabela de agenda, e que, desta forma, tivéssemos fornecido não apenas os horários dos compromissos, mas também suas respectivas datas.

Vamos apagar a tabela de agenda recriá-la com o tipo DATETIME no campo Hora, inserindo registros com data e hora dos compromissos:

DROP TABLE tblAgenda;

CREATE TABLE tblAgenda (
ID SMALLINT PRIMARY KEY IDENTITY,
Compromisso VARCHAR(60) NOT NULL,
Hora DATETIME
);

INSERT INTO tblAgenda (Compromisso, Hora)
VALUES
('Acordar','20200130 05:00'),
('Academia','20200130 06:00'),
('Ir ao Trabalho','20200130 07:30'),
('Almoço com Cliente','20200130 12:40'),
('Reunião com Chefia','20200130 15:30'),
('Fim do Expediente','20200130 17:00'),
('Consulta com Dentista','20200130 17:30'),
('Cinema','20200130 19:00'),
('Jantar em Casa','20200130 21:15'),
('Assistir Netflix','20200130 22:00'),
('Hora de Dormir','20200130 23:30'),
('Acordar','20200202 05:00'),
('Ir ao Trabalho','20200202 07:30'),
('Almoço com Cliente','20200202 12:30'),
('Reunião com Chefia','20200202 16:30'),
('Fim do Expediente','20200202 17:00'),
('Compras no Shopping','20200202 18:15'),
('Cinema','20200202 19:00'),
('Jantar no Restaurante','20200202 21:30'),
('Hora de Dormir','20200202 23:30');

Verificando os registros inseridos:

SELECT * FROM tblAgenda;

Vamos agora consultar os compromissos em um intervalo, digamos de 30/01/2020 às 20:00 até 02/02/2020 às 15:00, usando a seguinte sintaxe:

SELECT * FROM tblAgenda
WHERE Hora BETWEEN '20200130 22:00' AND '20200202 15:00';

Resultado:

É isso aí! Vimos nesta lição como trabalhar com data e hora como filtros da cláusula BETWEEN em consultas SQL.

 

Sair da versão mobile