Su comparar va a funcionar, pero será lento porque las fechas se convierten en una cadena para cada fila. Para comparar dos partes de manera eficiente en tiempo, trate de:
declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'
select (cast(@first as float) - floor(cast(@first as float))) -
(cast(@second as float) - floor(cast(@second as float)))
as Difference
explicación larga: una fecha en el servidor SQL se almacena como un número de coma flotante. Los dígitos antes del punto decimal representan la fecha. Los dígitos después del punto decimal representan el tiempo.
así que aquí tiene una fecha de ejemplo:
declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'
Vamos a convertirlo en un flotador:
declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682
Ahora toma la parte después del dígito, es decir el tiempo:
set @myfloat = @myfloat - floor(@myfloat)
select @myfloat
-- Shows 0,824492168212601
Convertirlo a una fecha y hora:
declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123
El 1900-01-01 es solo la fecha "cero"; puede visualizar la pieza del tiempo con convert, especificando, por ejemplo, el formato 108, que está justo en el momento:
select convert(varchar(32),@mytime,108)
-- Shows 19:47:16
Las conversiones entre fecha y hora y el flotador son bastante rápido, porque están básicamente almacenan en la misma forma.
¿Por qué tengo que convertir a VARCHAR así que puedo comparar si un tiempo es mayor que el otro? ¿No compararía esto la cuerda con la cuerda? – AndreMiranda
La función DateDiff acepta campos de fecha y hora como entrada, por lo que le permitirá superar la barrera. – Eric