缩短日期时间的最佳方法是什么,包括毫秒只有第二个?
例如2012-01-25 17:24:05.784
到2012-01-25 17:24:05
答案 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)
答案 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))