在T-SQL中将日期时间截断为秒(删除毫秒)

时间:2012-01-26 13:44:10

标签: tsql datetime

缩短日期时间的最佳方法是什么,包括毫秒只有第二个?

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

8 个答案:

答案 0 :(得分:51)

这将截断毫秒。

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 and CONVERT
DATEADD
DATEPART

答案 1 :(得分:22)

最快,语言安全且确定性

DATEADD(second, DATEDIFF(second, '20000101', getdate()), '20000101')

答案 2 :(得分:7)

convert(datetime, convert(varchar, @datetime_var, 120), 120)

答案 3 :(得分:7)

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

选择转换(datetime2(0),getdate())

答案 4 :(得分:3)

以下具有非常快的性能,但它不仅可以移除毫秒,还可以移动到分钟。见(http://msdn.microsoft.com/en-us/library/bb677243.aspx)

select cast(yourdate as smalldatetime) from yourtable

编辑:

以下脚本用于比较Mikael和gbn I的脚本,因为两个答案都很棒。测试将显示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

答案 5 :(得分:1)

declare @dt datetime2
set @dt = '2019-09-04 17:24:05.784' 
select convert(datetime2(0), @dt)

答案 6 :(得分:0)

扩展@Mikael Eriksson接受的答案:

要将datetime2(7)截断为3个地方(又称毫秒):

   -- Strip of fractional part then add desired part back in
   select dateadd(nanosecond,
                  -datepart(nanosecond, TimeUtc) + datepart(millisecond, TimeUtc) * 1e6,
                  TimeUtc) as TimeUtc

datetime2(p)当前的最大精度为(7)(来自docs.microsoft.com

答案 7 :(得分:0)

--- DOES NOT Truncate milliseconds
--- 2018-07-19 12:00:00.000
SELECT CONVERT(DATETIME, '2018-07-19 11:59:59.999')  

--- Truncate milliseconds
--- 2018-07-19 11:59:59.000
SELECT CONVERT(DATETIME, CONVERT(CHAR(19), '2018-07-19 11:59:59.999', 126)) 

--- Current Date Time with milliseconds truncated
SELECT CONVERT(DATETIME, CONVERT(CHAR(19), GETDATE(), 126))