在T-SQL中将Datetime截断为Second(Remove Milliseconds)
缩短包含毫秒的date时间的最佳方法是什么?
例如2012-01-25 17:24:05.784
到2012-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())