TSQL обновление DATETIME минуты и секунды - PullRequest
9 голосов
/ 09 августа 2011

Я давно смотрю на это и не могу понять, как это сделать.На самом деле у меня нет кода для публикации, потому что я еще даже не приблизился к его выяснению, и все, что я придумываю, просто не имеет никакого смысла.

В любом случае, у нас есть приложение, котороесобирает данные каждые 5 минут на основе максимального (readtime) в таблице (но также будет отображать реальные значения, только если время кратно 5 и составляет: 00.000 секунд.) По большей части это нормально, но иногдаданные выйдут из синхронизации и приведут к множеству значений 0 в нашей таблице.

В настоящее время мы только что вошли, собирали последнее время чтения и жестко кодировали новую дату, которую мы хотели быиспользовать.Я ищу сценарий, который я могу использовать для автоматизации этого.Для целей этого вопроса мы можем использовать GETDATE ().

DECLARE @readtime DATETIME = GETDATE()  --2011-08-09 08:51:19.237
             -- I want it to look like    2011-08-09 08:50:00.000

Ответы [ 3 ]

4 голосов
/ 09 августа 2011

Попробуйте это.

В основном проверяется, что минуты делятся на 5, секунды на 6 и мс на 1000, а если нет, вычитает остаток от каждого:

DECLARE @dt datetime = '2011-08-09 08:51:19.237'

SELECT DATEADD(
                MILLISECOND, 
                -(DATEPART(MILLISECOND, @dt) % 1000), 
                DATEADD(
                        SECOND, 
                        -(DATEPART(second, @dt) % 60), 
                        DATEADD(
                                minute, 
                                -(DATEPART(minute, @dt) % 5), @dt )
                        )
                )

Выход:

2011-08-09 08:50:00.000

3 голосов
/ 09 августа 2011

Округление до ближайших 5 минут.

DECLARE @readtime DATETIME = 
    DATEADD(minute, 5*FLOOR(DATEDIFF(minute, 0, GETDATE())/5.0), 0)
0 голосов
/ 09 августа 2011

Вы видели это?

Как округлить время в T-SQL

Вы можете попробовать функцию RoundTime из принятого ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...