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;
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.
Escreva um comentário