2010-07-19 11 views
8

¿Cuál es la mejor manera de quitar la fecha desde un DATETIME, por lo que solo tiempo queda para hacer una comparación?fecha de la tira de TSQL de la fecha y hora

Sé que puedo hacer lo siguiente:

CONVERT(DATETIME, CONVERT(VARCHAR(8), GETDATE(),8)) 

pero esto implica convertir y caracteres. Si quisiera verificar si una hora (incluidos los minutos) fue entre otras dos veces almacenadas en columnas DATETIME, ¿existe una forma elegante de hacerlo sin tener que depender de la conversión a cadenas de caracteres?

+0

un valor 'DATETIME' siempre ays tienen un elemento de fecha (pista en el nombre :) por lo que la única forma de eliminar literalmente la fecha "para que solo quede tiempo" es convertirlo como un tipo que no tiene elemento de fecha, es decir, la respuesta de @Mike M. – onedaywhen

+0

Debería haber especificado que nuestro software utiliza SQL2005 (y fue diseñado en la era de SQL2000, por lo que el tipo de datos TIME, que es una nueva característica de SQL2008, no es una solución viable. Si observa la respuesta que se marcó como correcta, ' Veo una solución elegante. – t3rse

Respuesta

9

Pruebe la función de TimeOnly Essential SQL Server Date, Time, and DateTime Functions:

create function TimeOnly(@DateTime DateTime) 
returns datetime 
as 
    begin 
    return dateadd(day, -datediff(day, 0, @datetime), @datetime) 
    end 
go 

O simplemente tire la fecha y hora como tiempo en SQL Server 2008:

declare @time as time 
set @time = cast(dateTimeVal as time) 
1
DECLARE 
    @Now DateTime, 
    @Today DateTime, 
    @Time DateTime 

SET @Now = GetDate() 
SET @Today = DateAdd(dd, DateDiff(dd, 0, @Now), 0) 

SET @Time = DateAdd(ss, DateDiff(ss, @Today, @Now), 0) 

SELECT @Time 
+0

Hermosa. Absolutamente hermosa. En un MSDE DB, utilicé el cálculo @Today para quitar el tiempo de una fecha pasada, funciona espléndidamente. – KeithS

11

Si está utilizando SQL 2008

SELECT CAST(GETDATE() AS TIME) 
Cuestiones relacionadas