Подтвердить что ты не робот

Способ извлечения данных DateTime без секунд

У меня есть sql DateTime (ms sql server) и вы хотите извлечь одну и ту же дату без секунд: например 2011-11-22 12:14:58.000, чтобы стать: 2011-11-22 12:14:00.000

Как я могу это сделать? Я думал использовать DATEADD в сочетании с DATEPART, но кажется очень склонным к ошибкам (помимо проблем с производительностью)

4b9b3361

Ответ 1

попробуйте следующее:

 SELECT CAST(CONVERT(CHAR(16), '2011-11-22 12:14',113) AS datetime)

Ответ 2

SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable

Это будет эффективно, если вы не хотите медленного преобразования между типами данных.

Ответ 3

Дата и время необходимо тщательно и не преобразовывать как ТЕКСТ.

Мое личное решение:

    CREATE FUNCTION [dbo].[fnDateTimeTruncated]
(
    @datetime DATETIME
)
RETURNS DATETIME
AS
BEGIN
    RETURN DATETIMEFROMPARTS ( year(@datetime), month(@datetime), day(@datetime), DATEPART(hh,@datetime), DATEPART(mi,@datetime), 0, 0)
END

Отредактировано:

Относительно http://blog.waynesheffield.com/wayne/archive/2012/03/truncate-a-date-time-to-different-part/, DateAdd имеет лучшую производительность. Благодаря t-clausen.dk

Ответ 4

DECLARE @TheDate DATETIME
SET @TheDate = '2011-11-22 12:14:58.000'

DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0)

В запросах

/* ...all records in that minute; index-friendly expression */ 
WHERE TheDate BETWEEN DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0) 
                  AND DATEADD(mi, DATEDIFF(mi, 0, @TheDate) + 1, 0)

Ответ 5

Если миллисекунды отсутствуют, чем

DECLARE @dt datetime2 = '2011-11-22 12:14:58.000';
DECLARE @goalDt datetime2 = DATEADD(second,-DATEPART(second,@dt), @dt);

Чтобы удалить часть в миллисекундах, добавьте

SET @goalDt = DATEADD(millisecond,-DATEPART(millisecond,@goalDt ), goalDt dt);

Ответ 6

С небольшим возиться, это, кажется, работает хорошо:

SELECT CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))

Полученный результат: 2011-11-22 12:14

Точный способ, которым я использую его в своем запросе как часть списка выбора:

,CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
+ '    (UTC +0)' AS [TIME]

Дает мне результат: 15 декабря 2017 06:43 (UTC +0)

Ответ 7

Чтобы округлить его:

DECLARE @TheDate DATETIME
SET @TheDate = '2019-1-2 12:14:58.400'

SELECT CAST(@TheDate AS SMALLDATETIME)

Чтобы просто усечь:

DECLARE @TruncTheDate DATETIME
SET @TruncTheDate = '2019-1-2 12:14:58.400'

SELECT DATEADD(mi, DATEDIFF(mi, 0, @TruncTheDate), 0)