У меня есть таблица с отметкой времени, которую я хочу округлить до 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>
Вы можете использовать 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')
);