Усечение даты и времени (удаление миллисекунд) в T-SQL - PullRequest
37 голосов
/ 26 января 2012

Каков наилучший способ сократить дату и время, которое включает миллисекунды, чтобы иметь только секунду?

Например, от 2012-01-25 17:24:05.784 до 2012-01-25 17:24:05

Ответы [ 5 ]

51 голосов
/ 26 января 2012

Это усекает миллисекунды.

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

22 голосов
/ 26 января 2012

самый быстрый, а также безопасный для языка и детерминированный

DATEADD(second, DATEDIFF(second, '20000101', getdate()), '20000101')
7 голосов
/ 31 октября 2016

Итак, самый простой способ сейчас:

выберите конвертировать (datetime2 (0), getdate ())

7 голосов
/ 02 августа 2013
convert(datetime, convert(varchar, @datetime_var, 120), 120)
3 голосов
/ 26 января 2012

Следующее имеет очень быструю производительность, но оно не только удаляет миллисекунды, но и округляет до минуты. Смотри (http://msdn.microsoft.com/en-us/library/bb677243.aspx)

select cast(yourdate as smalldatetime) from yourtable

Edit:

Следующий скрипт сделан для сравнения скриптов от Микаэля и Гбн. Я проголосовал за них обоих, так как оба ответа великолепны Тест покажет, что скрипт 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...