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)