Pular para o conteúdo principal

Dominando as comparações de data do SQL: Como consultar datas superiores a uma data específica

Saiba como consultar e filtrar uma data maior que uma data específica no SQL. Compare como a lógica de data maior que difere no MySQL, PostgreSQL e SQL Server.
Actualizado 30 de jul. de 2024  · 11 min de leitura

Entender como consultar datas superiores a uma data específica é fundamental para o gerenciamento e a análise eficazes do banco de dados. Este tutorial fornecerá um guia abrangente para você realizar comparações de datas no SQL em diferentes sistemas de banco de dados SQL, incluindo SQL Server, PostgreSQL e Oracle. Se você estiver lidando com análise de dados históricos, relatórios ou filtragem de registros, o domínio dessa técnica aprimorará seus recursos de consulta SQL.

Ao final deste guia, você será capaz de:

  • Entenda as nuances dos formatos e funções de data em diferentes bancos de dados SQL, incluindo SQL Server, PostgreSQL e Oracle. 
  • Aplicar exemplos práticos a cenários do mundo real. 

Se você for um analista ou cientista de dados pronto para aprender mais, recomendo que faça o programa de habilidades SQL Fundamentals da DataCamp para se familiarizar com a consulta de dados de bancos de dados. Você também pode fazer o curso Criando bancos de dados PostgreSQL para dominar os detalhes do PostgreSQL especificamente.

Introdução às comparações de datas do SQL

A comparação de datas é importante no SQL, pois permite que os profissionais de dados filtrem e classifiquem os dados durante a análise. O método é especialmente útil em relatórios financeiros ou gerenciamento de estoque, o que requer análise de tendências.

O operador "maior que" do SQL (>) é usado com datas para comparar dois valores de data. Quando você incluir o operador "maior que" em uma consulta SQL com datas, a consulta retornará registros com datas posteriores à data especificada. Por exemplo, a consulta abaixo retornará linhas na tabela Orders em que OrderDate é posterior a 2023-01-01.

SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';

Vamos começar revisando rapidamente os operadores SQL básicos que podem ser usados para filtrar dados. Esses operadores também são abordados em nossa Folha de dicas básicas de SQL, que você pode revisar antes de tentar os exemplos abaixo.

Igual a (=)

O operador = é usado no SQL para comparar se dois valores são iguais. Veja abaixo um exemplo de quando o operador é usado com um valor de data. A consulta SQL retornará linhas na tabela Orders em que OrderDate é igual a 2023-01-01.

-- Select all orders placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';

Não é igual a (!= ou <>)

O operador != ou <> verifica dois valores e retorna aqueles que não são iguais aos referenciados. Por exemplo, quando usado com um valor de data, o operador != ou <> retornará linhas que não são iguais à data referenciada.

-- Select all orders that were not placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate != '2023-01-01';
-- Alternative syntax using <>
SELECT *
FROM Orders
WHERE OrderDate <> '2023-01-01';

Menor que (<)

O operador < é usado no SQL para verificar se o valor à esquerda é menor que o da direita. Quando usada em uma consulta SQL com valores de data, a consulta retornará registros com datas anteriores à data especificada. Por exemplo, a consulta abaixo retornará linhas na tabela Orders em que OrderDate é anterior a 2023-01-01.

-- Select all orders placed before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';

Maior ou igual a (>=)

O operador >= verifica se os valores à esquerda do operador são maiores ou iguais ao valor à direita. Quando o operador for usado no SQL para consultar um valor de data, ele retornará registros em que os valores de data são apenas iguais ou maiores que o valor referenciado.

-- Select all orders placed on or after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';

Menor que ou igual a (<=)

O operador <= é usado no SQL para verificar se os valores no lado esquerdo do operador são menores ou iguais ao valor no lado direito. Quando o operador for usado para consultar um valor de data, ele retornará registros em que os valores de data são apenas iguais ou inferiores ao valor que está sendo referenciado.

-- Select all orders placed on or before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';

Comparação de datas no SQL Server

Você pode comparar datas no SQL Server usando os seguintes operadores: <, <=, >, >=, e =. No entanto, abordaremos o seguinte:

Usando o operador "maior que" (>)

O operador "maior que" (>) é usado no SQL Server para filtrar datas posteriores à data que está sendo comparada no lado direito do operador. Por exemplo, a consulta abaixo filtra a tabela Orders e retorna registros de pedidos feitos após OrderDate 2023-01-01.

-- Select all orders delivered after January 1, 2023
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';

Usando a função GETDATE()

A função GETDATE() no SQL Server retorna a data atual conforme registrada no sistema do usuário. Portanto, você pode usar essa função para consultar dados e filtrar as linhas em que a data é maior que a data atual.

-- Select all orders delivered after the current date and time
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();

Usando BETWEEN para intervalos de datas

O operador BETWEEN no SQL é usado para filtrar valores entre um determinado intervalo. Quando usado no SQL Server com datas, você pode filtrar as linhas que contêm datas dentro da data declarada. Os resultados incluirão as datas de início e término conforme escritas na consulta.

-- Select all orders delivered between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE DeliveryDate BETWEEN '2023-01-01' AND '2023-12-31';

Usando CAST e CONVERT para intervalos de datas

Você também pode usar as funções CAST e CONVERT para evitar erros. Essas funções garantem que os valores de data sejam interpretados e formatados corretamente.

-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;

-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;

-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;

Comparação de datas no PostgreSQL

O PostgreSQL tem algumas cláusulas diferentes usadas para comparar datas. Discutiremos alguns deles a seguir.

Usando o operador "maior que" (>)

Semelhante ao banco de dados do SQL Server, o operador > no PostgreSQL filtra a data maior que a data de comparação.

-- Select all orders placed after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';

Usando a função EXTRACT

A função EXTRACT é usada no PostgreSQL para recuperar campos de data, como ano, mês ou dia. Na consulta abaixo, a cláusula EXTRACT filtra os registros do ANO 2023.

-- Select all orders placed in the year 2023
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;

Uso da função INTERVALO

A função INTERVAL é usada no PostgreSQL para fazer alguns cálculos de data. INTERVAL permite que você adicione ou subtraia quantidades específicas de tempo de ou para uma data.

-- Select all orders placed in the last 30 days
SELECT *
FROM Orders
-- Filter orders placed within the last 30 days from the current date
WHERE OrderDate > NOW() - INTERVAL '30 days';

Usando a função DATE_PART

A função DATE_PART permite que você extraia um subcampo do valor da data. Esse subcampo pode ser a data ou a hora. A consulta abaixo retorna os pedidos feitos em março, fornecendo um valor de precisão dupla de 3 para o terceiro mês.

-- Select all orders placed in March
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;

Usando a função TO_DATE

A função TO_DATE no PostgreSQL converte uma determinada string em um valor de data com base no formato fornecido. Na consulta abaixo, o valor da data é fornecido como uma cadeia de caracteres. Portanto, você converte como uma data no formato YYYY-MM-DD.

-- Select all orders placed on January 1, 2023, using a string date
SELECT *
FROM Orders
WHERE OrderDate = TO_DATE('2023-01-01', 'YYYY-MM-DD');

Usando BETWEEN para intervalos de datas

Assim como no SQL Server, a cláusula BETWEEN no PostgreSQL filtra os dados em um intervalo específico. Para valores que contêm datas, a função BETWEEN filtra e retorna linhas entre as datas indicadas. Essas datas também estão incluídas nos resultados.

-- Select all orders placed between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2023-01-01' AND '2023-12-31';

Comparação de datas no Oracle

Usando o operador "maior que" (>)

O operador > filtra a data que é posterior à data de comparação.

-- Select all active users with an end date in the future
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
  -- Ensure the end date is in the future
  AND EndDate > SYSDATE;

Manipulação de datas NULL e condições complexas

Ao comparar datas em um banco de dados Oracle, é importante especificar cenários complexos, como datas vazias. Nesse caso, usamos a cláusula IS NULL para filtrar registros sem datas.

-- Select all active users with either a future end date or no end date (NULL)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
  -- Ensure the end date is either in the future or is NULL (no end date)
  AND (EndDate > SYSDATE OR EndDate IS NULL);

Usando BETWEEN para intervalos de datas

A cláusula BETWEEN também é usada no Oracle para filtrar dados em um intervalo específico. Para valores que contêm datas, a função BETWEEN filtra e retorna registros entre as datas indicadas. Essas datas também estão incluídas nos resultados.

-- Select all active users with an end date between the current date and a specified future date (e.g., end of the year)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
  -- Ensure the end date is between the current date and a specified future date (e.g., December 31, 2023)
  AND EndDate BETWEEN SYSDATE AND DATE '2023-12-31';

Armadilhas comuns e práticas recomendadas

Tive problemas com datas e com o operador "maior que" no SQL. Aqui estão alguns erros comuns que descobri e dicas de como evitá-los.

Formatos de data inconsistentes

O uso de formatos de data inconsistentes em suas consultas resultará em erros. Você pode não obter os resultados desejados se misturar formatos de data como YYYY-MM-DD e MM-DD-YYYY

Para evitar esses problemas, certifique-se sempre de que você use o formato de data padrão. Você também pode converter a data para o formato de sua preferência ou de acordo com as convenções locais usando TO_DATE nos bancos de dados PostgreSQL ou Oracle. No SQL Server, você pode usar as funções CAST e CONVERT.

-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;

-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;

-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;

Manuseio de fuso horário

Você pode obter resultados imprecisos ao lidar com dados em vários fusos horários. Além disso, não levar em conta as diferenças de fuso horário durante a conversão de datas pode causar erros.

Portanto, recomendo que você armazene suas datas em UTC (Tempo Universal Coordenado) e use as funções de fuso horário incorporadas para converter datas.

-- Store dates in UTC and convert to local time zone
SELECT *
FROM Orders
-- Filter orders where the OrderDate in UTC is greater than the current date in the 'America/New_York' time zone
WHERE OrderDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'America/New_York';
-- Use time zone functions for accurate comparison
SELECT *
FROM Users
-- Filter users where the EndDate in UTC is greater than the current date in UTC
WHERE EndDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'UTC';

Como evitar erros comuns com datas

Ao trabalhar com datas, é importante evitar erros recuperando apenas os valores de que você precisa na sua análise. Por exemplo, você pode omitir o componente de tempo em um valor de data se ele for irrelevante para a sua análise. Trate os valores de NULL explicitamente para evitar erros, especialmente quando os valores de data podem conter o erro.

Escrever consultas legíveis e de fácil manutenção

Você pode acabar escrevendo consultas complexas e aninhadas, o que dificulta a leitura e o acompanhamento das diferentes cláusulas. Da mesma forma, se você não incluir comentários em seu código, será difícil explicar o que ele faz.

Portanto, recomendo que você inclua comentários que expliquem a lógica por trás das cláusulas. Para tornar as consultas legíveis, você também pode usar subconsultas simples ou expressões de tabela comuns (CTEs). Confira nosso curso Reporting in SQL para saber mais sobre como escrever consultas legíveis e de fácil manutenção para análise e geração de relatórios.

Uma observação sobre a diferença entre os métodos SQL

A diversidade dos métodos SQL para comparações de datas em diferentes sistemas de banco de dados, como SQL Server, PostgreSQL e Oracle, decorre da evolução exclusiva e das filosofias de design de cada sistema de gerenciamento de banco de dados. Cada sistema foi desenvolvido de forma independente e atendeu a diferentes necessidades dos usuários e requisitos de compatibilidade, o que levou a implementações variadas de padrões SQL e recursos proprietários adicionais.

Por exemplo:

  • O SQL Server, desenvolvido pela Microsoft, incorpora funções e sintaxe que se alinham estreitamente com outros produtos da Microsoft, visando à integração e à facilidade de uso no ecossistema do Windows.
  • O PostgreSQL é um projeto de código aberto com grande ênfase na extensibilidade. Essa flexibilidade incentiva uma variedade de funções e operadores de data que podem ser otimizados ou ampliados por sua comunidade.
  • A Oracle normalmente se concentra em alta escalabilidade e confiabilidade para aplicativos corporativos, o que leva a otimizações específicas na forma como as datas e outros tipos de dados são tratados, muitas vezes com foco em ambientes de transações complexas e de alto volume.

Conclusão

Incentivo você a praticar as diferentes habilidades para saber quando aplicar as funções SQL em cenários do mundo real. Considere a possibilidade de fazer os cursos SQL Fundamentals e SQL Intermediate da DataCamp. Também recomendo o curso Associate Data Analyst in SQL para aspirantes a analistas de dados e cientistas de dados para ajudar você a dominar as diferentes técnicas de análise. Esses cursos também ajudarão você a se preparar para a Certificação SQL Associate, que é excelente para o currículo. 

Perguntas frequentes

O que é um operador de comparação?

Os operadores de comparação comparam dois valores e retornam resultados se os valores são verdadeiros ou falsos a partir do valor comparado.

Quais são os operadores comuns usados nos valores de data do SQL?

Os operadores comuns usados nos valores de data do SQL incluem igual a (=), maior que (>), menor que (<), maior ou igual a (>=), menor ou igual a (<=).

Quando o operador BETWEEN é usado no SQL?

O operador BETWEEN filtra registros dentro de um determinado intervalo.

Qual operador devo usar se minhas datas tiverem valores NULL?

Você deve incluir a cláusula IS NULL para que você possa lidar com valores nulos e evitar erros nos resultados da consulta.

O que devo fazer se minha consulta SQL retornar erros ao filtrar o valor da data?

Verifique se suas datas estão no formato correto. Caso contrário, converta-os em um formato consistente, como YYYY-MM-DD.

Temas

Aprenda SQL com a DataCamp

curso

Introduction to SQL

2 hr
870K
Learn how to create and query relational databases using SQL in just two hours.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

SQL Server, PostgreSQL, MySQL... qual é a diferença? Por onde devo começar?

Neste tutorial, você aprenderá algumas das diferenças básicas entre os dialetos SQL e por onde deve começar.

Mona Khalil

5 min

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

QUALIFICAR: A instrução de filtragem SQL que você nunca soube que precisava

Saiba mais sobre a cláusula SQL QUALIFY, um método de filtragem essencial, porém menos conhecido, no SQL. Entenda sua sintaxe, usos e como ela difere de outros métodos de filtragem SQL.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

6 min

See MoreSee More