Способ извлечения из данных значения DateTime без секунд - PullRequest
27 голосов
/ 17 января 2012

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

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

Ответы [ 7 ]

49 голосов
/ 17 января 2012
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable

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

21 голосов
/ 17 января 2012

попробуйте это:

 SELECT CAST(CONVERT(CHAR(16), '2011-11-22 12:14',113) AS datetime)
2 голосов
/ 15 декабря 2017

Немного повозившись, похоже, это хорошо работает:

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)

2 голосов
/ 03 мая 2015

Дата и время нужно тщательно и не преобразовывать в текст.

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

    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

1 голос
/ 27 февраля 2014

Если нет миллисекунд, чем

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);
1 голос
/ 17 января 2012
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)
0 голосов
/ 30 апреля 2019

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...