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

У меня есть таблица с отметкой времени, которую я хочу округлить до 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>
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
44
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать 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

Вы можете использовать метод 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;

Что-то вроде этого...

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')
        );

Другие вопросы по теме