从DATETIME中剥离日期的最佳方法是什么,只剩下时间进行比较?
我知道我可以做到以下几点:
CONVERT(DATETIME, CONVERT(VARCHAR(8), GETDATE(),8))
但这涉及转换和角色。如果我想检查时间(包括分钟)是否存储在DATETIME列中的两个其他时间之间,是否有一种优雅的方法来执行此操作而不必依赖于转换为字符串?
答案 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);