Published on

September 25, 2024

Filtrando Fechas y Horas en SQL Server

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.