从datetime开始的TSQL剥离日期

时间:2010-07-19 16:41:42

标签: sql tsql

从DATETIME中剥离日期的最佳方法是什么,只剩下时间进行比较?

我知道我可以做到以下几点:

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

但这涉及转换和角色。如果我想检查时间(包括分钟)是否存储在DATETIME列中的两个其他时间之间,是否有一种优雅的方法来执行此操作而不必依赖于转换为字符串?

4 个答案:

答案 0 :(得分:11)

如果您使用的是SQL 2008

SELECT CAST(GETDATE() AS TIME)

答案 1 :(得分:10)

尝试Essential SQL Server Date, Time, and DateTime Functions中的TimeOnly功能:

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

或者只是在SQL Server 2008中将DateTime转换为时间:

declare @time as time
set @time = cast(dateTimeVal as time)

答案 2 :(得分: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

答案 3 :(得分:0)

从日期时间获取日期和时间的另一种方法。

SQL Server中的datetime实现为浮点值,其中整个部分 floor(value)是从1900-01-01开始的日和小数部分(value - floor(value))是从一天开始经过二十四小时的一部分

select 
    d as [datetime],
    cast(cast(T.d as float) - floor(cast(T.d as float)) as datetime) as [time],
    cast(floor(cast(T.d as float)) as datetime) as [date]
from
    (values
        (getdate()),
        ('1753-01-01 23:59:59.700'),
        ('1899-12-31 00:00:00.300'),
        ('1900-01-01 00:00:00.300')
    ) as T(d);