Cláusula BETWEEN e tipos de Hora 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;

o tipo TIME no SQL Server

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';

tipo TIME e cláusula BETWEEN no SQL Server

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';

Cláusula BETWEEN com GETDATE no SQL Server

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;

Cláusula BETWEEN com DATETIME no SQL Server

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:

como usar between com datetime no SQL Server

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

 

Sobre Fábio dos Reis (1331 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*