curso
Dominar las comparaciones de fechas SQL: Cómo buscar fechas mayores que una fecha concreta
Comprender cómo consultar fechas superiores a una fecha concreta es crucial para una gestión y un análisis eficaces de la base de datos. Este tutorial proporcionará una guía completa para realizar comparaciones de fechas en SQL en diferentes sistemas de bases de datos SQL, incluidos SQL Server, PostgreSQL y Oracle. Tanto si te dedicas al análisis de datos históricos como a la elaboración de informes o al filtrado de registros, dominar esta técnica mejorará tus capacidades de consulta SQL.
Al final de esta guía, serás capaz de:
- Comprende los matices de los formatos y funciones de fecha en distintas bases de datos SQL, como SQL Server, PostgreSQL y Oracle.
- Aplica ejemplos prácticos a situaciones del mundo real.
Si eres un analista de datos o un científico de datos dispuesto a aprender más, te recomiendo que sigas el curso de habilidades Fundamentos de SQL de DataCamp para familiarizarte con la consulta de datos a partir de bases de datos. También puedes hacer el curso Creación de bases de datos PostgreSQL para dominar los entresijos de PostgreSQL específicamente.
Introducción a las comparaciones de fechas SQL
La comparación de fechas es importante en SQL, ya que permite a los profesionales de los datos filtrar y ordenar los datos durante el análisis. El método es especialmente útil en los informes financieros o en la gestión de inventarios, que requieren un análisis de tendencias.
El operador "mayor que" de SQL (>
) se utiliza con fechas para comparar dos valores de fecha. Cuando incluyes el operador "mayor que" en una consulta SQL con fechas, la consulta devolverá registros con fechas posteriores a la fecha especificada. Por ejemplo, la consulta siguiente devolverá filas de la tabla Orders
en las que el OrderDate
sea posterior a 2023-01-01
.
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Empecemos repasando rápidamente los operadores SQL básicos que pueden utilizarse para filtrar datos. Estos operadores también se tratan en nuestra Hoja de trucos de conceptos básicos de SQL, que puedes revisar antes de probar los ejemplos que aparecen a continuación.
Igual a (=)
El operador =
se utiliza en SQL para comparar si dos valores son iguales. A continuación se muestra un ejemplo de utilización del operador con un valor de fecha. La consulta SQL devolverá filas en la tabla Orders
en las que OrderDate
sea igual a 2023-01-01
.
-- Select all orders placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';
No es igual a (!= o <>)
El operador !=
o <>
comprueba dos valores y devuelve los que no son iguales a los referenciados. Por ejemplo, cuando se utiliza con un valor de fecha, el operador !=
o <>
devolverá filas que no coincidan con la fecha 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';
Menos de (<)
El operador <
se utiliza en SQL para comprobar si el valor de la izquierda es menor que el de la derecha. Cuando se utiliza en una consulta SQL con valores de fecha, la consulta devolverá registros con fechas anteriores a la fecha especificada. Por ejemplo, la consulta siguiente devolverá filas de la tabla Orders
en las que el OrderDate
sea anterior a 2023-01-01
.
-- Select all orders placed before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';
Mayor o igual que (>=)
El operador >=
comprueba si los valores de la izquierda del operador son mayores o iguales que el valor de la derecha. Cuando el operador se utiliza en SQL para consultar un valor de fecha, devolverá registros en los que los valores de fecha sólo sean iguales o mayores que el valor al que se hace referencia.
-- Select all orders placed on or after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';
Menor o igual que (<=)
El operador <=
se utiliza en SQL para comprobar si los valores de la izquierda del operador son menores o iguales que el valor de la derecha. Cuando el operador se utiliza para consultar un valor de fecha, devolverá registros en los que los valores de fecha sólo sean iguales o inferiores al valor al que se hace referencia.
-- Select all orders placed on or before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';
Comparación de fechas en SQL Server
Podemos comparar fechas en SQL Server utilizando los siguientes operadores: <
, <=
, >
, >=
, y =
. Sin embargo, cubriremos lo siguiente:
Utilizar el operador "mayor que" (>)
El operador "mayor que" (>
) se utiliza en SQL Server para filtrar fechas posteriores a la fecha que se compara a la derecha del operador. Por ejemplo, la consulta siguiente filtra la tabla Orders
y devuelve los registros de los pedidos realizados después de OrderDate
2023-01-01
.
-- Select all orders delivered after January 1, 2023
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';
Utilizar la función GETDATE()
La función GETDATE()
de SQL Server devuelve la fecha actual registrada en el sistema del usuario. Por tanto, puedes utilizar esta función para consultar datos y filtrar las filas en las que la fecha sea mayor que la fecha actual.
-- Select all orders delivered after the current date and time
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();
Utilizar ENTRE para intervalos de fechas
El operador BETWEEN
en SQL se utiliza para filtrar valores entre un rango determinado. Cuando se utiliza en SQL Server con fechas, puedes filtrar filas que contengan fechas dentro de la fecha indicada. Los resultados incluirán tanto la fecha de inicio como la de finalización, tal y como están escritas en la 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';
Utilizar CAST y CONVERT para intervalos de fechas
También puedes utilizar las funciones CAST
y CONVERT
para evitar errores. Estas funciones garantizan que los valores de fecha se interpretan y formatean correctamente.
-- 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;
Comparación de fechas en PostgreSQL
PostgreSQL tiene algunas cláusulas diferentes que se utilizan para comparar fechas. A continuación analizamos algunas de ellas.
Utilizar el operador "mayor que" (>)
De forma similar a la base de datos SQL Server, el operador >
en PostgreSQL filtra la fecha mayor que la fecha de comparación.
-- Select all orders placed after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Utilizar la función EXTRACTAR
La función EXTRACT
se utiliza en PostgreSQL para recuperar campos de fecha como el año, el mes o el día. En la consulta siguiente, la cláusula EXTRACT
filtra los registros del AÑO 2023.
-- Select all orders placed in the year 2023
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;
Utilizar la función INTERVALO
La función INTERVAL
se utiliza en PostgreSQL para realizar algunos cálculos de fechas. INTERVAL
te permite sumar o restar cantidades específicas de tiempo a o de una fecha.
-- 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';
Utilizar la función DATE_PART
La función DATE_PART
permite extraer un subcampo del valor de la fecha. Este subcampo puede ser la fecha o la hora. La consulta siguiente devuelve los pedidos realizados en marzo, dando un valor de doble precisión de 3 para el tercer mes.
-- Select all orders placed in March
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;
Utilizar la función TO_DATE
La función TO_DATE
de PostgreSQL convierte una cadena dada en un valor de fecha basado en el formato dado. En la consulta siguiente, el valor de la fecha se proporciona como una cadena. Así que convierte como fecha al 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');
Utilizar ENTRE para intervalos de fechas
Al igual que SQL Server, la cláusula BETWEEN de PostgreSQL filtra los datos dentro de un rango específico. Para los valores que contienen fechas, la función BETWEEN
filtra y devuelve las filas comprendidas entre las fechas indicadas. Estas fechas también se incluyen en los 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';
Comparación de fechas en Oracle
Utilizar el operador "mayor que" (>)
El operador >
filtra la fecha que es posterior a la fecha de comparación.
-- 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;
Manejo de fechas NULL y condiciones complejas
Al comparar fechas en una base de datos Oracle, es importante especificar escenarios complejos, como fechas vacías. En este caso, utilizamos la cláusula IS NULL
para filtrar los registros sin fechas.
-- 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);
Utilizar ENTRE para intervalos de fechas
La cláusula BETWEEN
también se utiliza en Oracle para filtrar datos dentro de un rango específico. Para los valores que contienen fechas, la función BETWEEN
filtra y devuelve los registros comprendidos entre las fechas indicadas. Estas fechas también se incluyen en los 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';
Errores comunes y buenas prácticas
He tenido problemas con fechas y el operador "mayor que" en SQL. He aquí algunos errores comunes que he descubierto y consejos para evitarlos.
Formatos de fecha incoherentes
Utilizar formatos de fecha incoherentes en tus consultas provocará errores. Puede que no obtengas los resultados deseados si mezclas formatos de fecha como YYYY-MM-DD
y MM-DD-YYYY
.
Para evitar estos problemas, asegúrate siempre de utilizar el formato de fecha estándar. También puedes convertir la fecha a tu formato preferido o según las convenciones locales utilizando TO_DATE
en bases de datos PostgreSQL u Oracle. Para SQL Server, puedes utilizar las funciones CAST
y 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;
Gestión de zonas horarias
Puedes obtener resultados inexactos cuando manejes datos en varias zonas horarias. Además, no tener en cuenta las diferencias de huso horario durante la conversión de fechas puede provocar errores.
Por tanto, te recomiendo almacenar tus fechas en UTC (Tiempo Universal Coordinado) y utilizar las funciones integradas de zona horaria para convertir las fechas.
-- 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';
Evitar errores comunes con las fechas
Cuando trabajes con fechas, es importante evitar errores recuperando sólo los valores que necesites en tu análisis. Por ejemplo, puedes omitir el componente temporal en un valor de fecha si es irrelevante para tu análisis. Maneja los valores NULL
explícitamente para evitar errores, especialmente cuando los valores de fecha puedan contener el error.
Escribir consultas legibles y mantenibles
Puede que te encuentres escribiendo consultas complejas y anidadas, lo que dificulta la lectura y el seguimiento de las distintas cláusulas. Del mismo modo, no incluir comentarios en tu código dificulta la explicación de lo que hace.
Por ello, te recomiendo que incluyas comentarios que expliquen la lógica de las cláusulas. Para que las consultas sean más legibles, también puedes utilizar subconsultas sencillas o expresiones comunes de tabla (CTE). Consulta nuestro curso Informes en SQL para aprender más sobre cómo escribir consultas legibles y mantenibles para análisis e informes.
Una nota sobre por qué difieren los métodos SQL
La diversidad de métodos SQL para la comparación de fechas en distintos sistemas de bases de datos, como SQL Server, PostgreSQL y Oracle, surge de la evolución y las filosofías de diseño únicas de cada sistema de gestión de bases de datos. Cada sistema se desarrolló de forma independiente y atendía a diferentes necesidades de los usuarios y requisitos de compatibilidad, lo que dio lugar a diversas implementaciones de las normas SQL y a características propias adicionales.
Por ejemplo:
- SQL Server, desarrollado por Microsoft, incorpora funciones y sintaxis que se alinean estrechamente con otros productos de Microsoft, buscando la integración y la facilidad de uso en el ecosistema Windows.
- PostgreSQL es un proyecto de código abierto con un fuerte énfasis en la extensibilidad. Esta flexibilidad fomenta una variedad de funciones y operadores de fechas que pueden ser optimizados o ampliados por su comunidad.
- Oracle suele centrarse en la alta escalabilidad y fiabilidad de las aplicaciones empresariales, lo que conlleva optimizaciones específicas en la forma de gestionar las fechas y otros tipos de datos, a menudo centrándose en entornos de transacciones complejas y de gran volumen.
Conclusión
Te animo a que practiques las distintas habilidades para saber cuándo aplicar las funciones SQL en situaciones reales. Considera la posibilidad de seguir los cursos Fundamentos de SQL y SQL Intermedio de DataCamp. También recomiendo el curso de Analista de Datos Asociado en SQL para aspirantes a analistas y científicos de datos, que te ayudará a dominar las distintas técnicas de análisis. Estos cursos también te ayudarán a prepararte para la Certificación de Asociado SQL, que es magnífica en un currículum.
Preguntas frecuentes
¿Qué es un operador de comparación?
Los operadores de comparación comparan dos valores y devuelven como resultado si el valor comparado es verdadero o falso.
¿Cuáles son los operadores habituales utilizados en los valores de fecha de SQL?
Los operadores comunes utilizados en los valores de fecha SQL incluyen igual a (=
), mayor que (>
), menor que (<
), mayor o igual que (>=
), menor o igual que (<=
).
¿Cuándo se utiliza el operador ENTRE en SQL?
El operador BETWEEN
filtra los registros dentro de un rango determinado.
¿Qué operador debo utilizar si mis fechas tienen valores NULL?
Debes incluir la cláusula IS NULL
para tratar los valores nulos y evitar errores en los resultados de la consulta.
¿Qué debo hacer si mi consulta SQL devuelve errores al filtrar el valor de la fecha?
Comprueba que tus fechas tienen el formato correcto. Si no es así, conviértelos a un formato coherente como YYYY-MM-DD
.
Aprende SQL con DataCamp
curso
Intermediate SQL
curso
Joining Data in SQL
tutorial
FUNCIÓN SQL DATEDIFF()
tutorial
Ejemplos y tutoriales de consultas SQL
tutorial
CALIFICAR: La sentencia de filtrado SQL que nunca supo que necesitaba
tutorial
Seleccionar varias columnas en SQL
DataCamp Team
3 min
tutorial
Cómo utilizar GROUP BY y HAVING en SQL
Eugenia Anello
6 min
tutorial