2010-07-19 4 views
8

Каков наилучший способ снять с даты с DATETIME, так что только время осталось сделать сравнение?TSQL strip date from datetime

Я знаю, что я могу сделать следующее:

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

Но это предполагает преобразование и символов. Если бы я хотел проверить, было ли время (включая минуты) между двумя другими временами, хранящимися в столбцах DATETIME, есть ли элегантный способ сделать это, не полагаясь на преобразование в строки символов?

+0

Значение 'DATETIME' будет У ays есть элемент даты (ключ в имени :), поэтому единственный способ буквально удалить дату «так что осталось только время» - это использовать ее как тип, который не имеет элемента даты, т. е. ответа @Mike M. – onedaywhen

+0

Я должен был указать, что наше программное обеспечение использует SQL2005 (и было разработано в эпоху SQL2000, поэтому тип данных TIME, являющийся новой функцией SQL2008, не является приемлемым решением. Если вы посмотрите на ответ, который был помечен правильно, Посмотрите на элегантное решение. – t3rse

ответ

9

Попробуйте функцию 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 

Или просто бросить DateTime в качестве времени в 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

Красивая. Абсолютно красивая. В MSDE DB я использовал вычисление @Today, чтобы удалить время с прошедшей даты, отлично работает. – KeithS

11

Если вы используете SQL 2008

SELECT CAST(GETDATE() AS TIME)