Время округления до SQL - PullRequest
       2

Время округления до SQL

0 голосов
/ 08 апреля 2019

У меня есть таблица с отметкой времени, которую я хочу округлить через 15 минут. интервал. Я могу округлить с помощью приведенного ниже запроса, но он округляет и с 11:58, и с 12:02 до 12:00, а это не то, что я хочу. Я хотел бы округлить отметку времени в 15 минут. интервал, который дает мне time_untill, т. е. для любого значения с 11:45 до 11:59 следует округлить до 12, а с 12:00 до 12:14 - до 12:15. Пожалуйста, дайте мне знать, как я могу этого достичь? Спасибо

SELECT transaction_id, 
 CONVERT(smalldatetime, ROUND(CONVERT(float, CONVERT(datetime,   entry_date_time)) * 96.0, 0, 1) /96.0)   as transaction_datetime
     FROM <table>

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вы можете использовать метод DATEADD / DATEDIFF для усечения значений даты / времени, которые были доступны в течение длительного времени.

SELECT transaction_id,
        entry_date_time,
        DATEADD( MI, DATEDIFF( MI, '2010', entry_date_time)/15*15, '2010')    as transaction_datetime
--FROM Sample Data
FROM (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) transaction_id,
                DATEADD( SS, CHECKSUM(NEWID())%10000, CAST( GETDATE() AS smalldatetime)) AS entry_date_time
            FROM sys.columns)x;
0 голосов
/ 08 апреля 2019

Как то так ...

DECLARE @time TIME(0) = GETDATE();

SELECT 
    DATEADD(MINUTE,
        (((DATEDIFF(MINUTE, '00:00:00', @time) % 60) / 15) * 15),
        DATEADD(HOUR, DATEDIFF(HOUR, '00:00:00', @time), '00:00:00')
        );
0 голосов
/ 08 апреля 2019

Вы можете использовать datetimefromparts():

select dateadd(minute,
               15,
               datetimefromparts(year(entry_date_time), month(entry_date_time), day(entry_date_time),
                                 datepart(hour, entry_date_time),
                                 15 * (datepart(minute, entry_date_time) / 15), 0, 0
                                )
              ) as roundup15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...