在T-SQL中将Datetime截断为Second(Remove Milliseconds)

缩短包含毫秒的date时间的最佳方法是什么?

例如2012-01-25 17:24:05.7842012-01-25 17:24:05

这将截短毫秒。

 declare @X datetime set @X = '2012-01-25 17:24:05.784' select convert(datetime, convert(char(19), @X, 126)) 

要么

 select dateadd(millisecond, -datepart(millisecond, @X), @X) 

CAST和CONVERT
DATEADD
DATEPART

最快,也是语言安全和确定性的

 DATEADD(second, DATEDIFF(second, '20000101', getdate()), '20000101') 
 convert(datetime, convert(varchar, @datetime_var, 120), 120) 

以下具有非常快的性能,但它不仅消除毫秒,而且还分钟。 请参阅(http://msdn.microsoft.com/zh-cn/library/bb677243.aspx);

 select cast(yourdate as smalldatetime) from yourtable 

编辑:

下面的脚本是比较来自Mikael和gbn我提高了他们的脚本,因为两个答案都很好。 testing将显示gbn脚本比Mikaels稍快:

 declare @a datetime declare @x int = 1 declare @mikaelend datetime declare @mikael datetime = getdate() while @x < 5000000 begin select @a = dateadd(millisecond, -datepart(millisecond, getdate()), getdate()) , @x +=1 end set @mikaelend = getdate() set @x = 1 declare @gbnend datetime declare @gbn datetime = getdate() while @x < 5000000 begin select @a = DATEADD(second, DATEDIFF(second, '20000101', getdate()), '20000101') , @x +=1 end set @gbnend = getdate() select datediff(ms, @mikael, @mikaelend) mikael, datediff(ms, @gbn, @gbnend) gbn 

第一次运行

 mikael gbn ----------- ----------- 5320 4686 

第二次运行

 mikael gbn ----------- ----------- 5286 4883 

第三次运行

 mikael gbn ----------- ----------- 5346 4620 

所以,现在最简单的方法是:

select转换(datetime2(0),getdate())