Saltar al contenido

La mejor manera de comparar fechas sin tiempo en SQL Server

Solución:

No use convertir, eso involucra cadenas sin ningún motivo. Un truco es que una fecha y hora es en realidad un número y los días son la parte entera (el tiempo es la fracción decimal); por lo tanto, el día es el SUELO del valor: esto es solo matemáticas, no cadenas, mucho más rápido

declare @when datetime = GETUTCDATE()
select @when -- date + time
declare @day datetime = CAST(FLOOR(CAST(@when as float)) as datetime)
select @day -- date only

En su caso, no es necesario volver a convertir a fecha y hora; y el uso de un rango permite las comparaciones más eficientes (especialmente si está indexado):

declare @when datetime="Feb 15 2012  7:00:00:000PM"
declare @min datetime = FLOOR(CAST(@when as float))
declare @max datetime = DATEADD(day, 1, @min)

select * from sampleTable where DateCreated >= @min and DateCreated < @max

Reparto simple a Date resolverá el problema.

DECLARE @Date datetime="04/01/2016 12:01:31"

DECLARE @Date2 datetime="04/01/2016"

SELECT CAST(@Date as date)

SELECT CASE When (CAST(@Date as date) = CAST(@Date2 as date)) Then 1 Else 0 End

SELECT .......
FROM ........
WHERE 
CAST(@DATETIMEVALUE1 as DATE) = CAST(@DATETIMEVALUE2 as DATE)

La desventaja es que está lanzando la columna de filtro.

Si hay un índice en la columna de filtro, entonces, dado que está transmitiendo, el motor SQL ya no puede usar índices para filtrar la fecha de manera más eficiente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *