La filtración de fechas y horas es una operación común en SQL Server. En este tutorial, exploraremos varios ejemplos de cómo utilizar la cláusula WHERE con fechas y horas en Microsoft SQL Server.
Tabla y Consultas de Ejemplo
Comencemos por examinar una tabla de ejemplo llamada “errorlog” que ha sido creada y poblada con datos de muestra. La tabla tiene cuatro campos: Severidad (nvarchar(50)), Marca de tiempo (datetime2(3)), Mensaje (nvarchar(max)), y Archivo (bit).
Aquí están los 10 primeros registros de la tabla:
SELECT TOP (10) [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog];
El rango de datos para el conjunto de datos es desde el viernes, 9 de diciembre de 2022, 06:01 AM hasta el martes, 13 de diciembre de 2022, 02:16 PM.
Encontrar los Registros Más Antiguos y Más Recientes
Para encontrar el registro más antiguo, podemos utilizar la función MIN:
SELECT MIN([Marca de tiempo])
FROM [dbo].[errorlog];
Para encontrar el registro más reciente, podemos utilizar la función MAX:
SELECT MAX([Marca de tiempo])
FROM [dbo].[errorlog];
Filtrando por Fecha
Podemos filtrar registros basados en una fecha específica utilizando los operadores mayor que (>) o menor que (<). Por ejemplo, para encontrar registros mayores que 13/12/22:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] > '2022-12-13';
Para incluir el signo igual (=) y cambiar el filtro a mayor o igual al comienzo de 13/12/22:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] >= '2022-12-13';
De manera similar, podemos filtrar registros que son menores o iguales a una fecha específica:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] < '2022-12-13';
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] <= '2022-12-13';
Filtrando por Fecha y Hora
Si queremos filtrar registros basados en tanto la fecha como la hora, podemos incluir la hora en la cláusula WHERE. Por ejemplo, para encontrar registros mayores que 13/12/22 02:15 PM:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] > '2022-12-13 14:15';
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] >= '2022-12-13 14:15';
De manera similar, podemos filtrar registros que son menores o iguales a una fecha y hora específica:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] < '2022-12-13 14:15';
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] <= '2022-12-13 14:15';
Filtrando por un Rango de Fechas y Horas
Podemos buscar registros dentro de un marco de tiempo específico utilizando los operadores mayor que (>) y menor que (<) con la palabra clave AND. Por ejemplo, para encontrar registros que son mayores que 13/12/22 11:00 AM y menores que 13/12/22 02:00 PM:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] > '2022-12-13 11:00' AND [Marca de tiempo] < '2022-12-13 14:00';
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] >= '2022-12-13 11:00' AND [Marca de tiempo] <= '2022-12-13 14:00';
Una forma más sencilla de lograr el mismo resultado es utilizando el operador BETWEEN:
SELECT [Severidad], [Marca de tiempo], [Mensaje], [Archivo]
FROM [dbo].[errorlog]
WHERE [Marca de tiempo] BETWEEN '2022-12-13 11:00' AND '2022-12-13 14:00';
Eliminando Registros Basados en Fecha / Hora
Para eliminar registros basados en una fecha específica o fecha/hora, podemos utilizar la instrucción DELETE con la fecha o fecha/hora en la cláusula WHERE. Por ejemplo, para eliminar todos los registros anteriores a 10/12/22:
DELETE [dbo].[errorlog]
WHERE [Marca de tiempo] < '2022-12-10';
DELETE [dbo].[errorlog]
WHERE [Marca de tiempo] < DATEADD(dd, -7, GETDATE());
Actualizando Registros Basados en Fecha / Hora
Si queremos actualizar registros basados en una fecha específica o fecha/hora, podemos utilizar la instrucción UPDATE con la fecha o fecha/hora en la cláusula WHERE. Por ejemplo, para marcar registros como archivados si tienen más de 7 días:
UPDATE [dbo].[errorlog]
SET [Archivo] = 1
WHERE [Marca de tiempo] < DATEADD(dd, -7, GETDATE());
Estos ejemplos demuestran cómo filtrar y manipular datos basados en fechas y horas en SQL Server. Utilizando la cláusula WHERE de manera efectiva, puedes recuperar, eliminar o actualizar registros basados en criterios específicos de fecha y hora.
Última actualización del artículo: 2023-01-19