[英]T-SQL: Rounding Time in to 15 minutes but only after 5 minutes past the 15min
我有一個帶有日期時間字段的表。 我正在嘗試以15分鍾為間隔四舍五入時間。 但是對於非標准的數學舍入規則,如果超過15分鍾間隔超過5分鍾,則會進行舍入。
例如
如果06:05向下舍入到06:00
IF 06:06向上舍入到06:15
如果06:20向下舍入到06:15
IF 06:21向上舍入到06:30,依此類推。
我設法在這里找到T-SQL:舍入到最近的15分鍾間隔以舍入到最近的15分鍾,但這使用了數學舍入,這意味着06:07仍將舍入到06:00,而不是舍入到06:15。
下面的代碼我必須去:
cast(datepart(hour, getdate()) + datepart(minute, getdate()) / 60.00 as decimal(5, 2))
只需使用一些約會技巧即可。
這段代碼將為您提供評估時間的最佳時間(通過累加SQL中的0日期以來的小時數,有效地消除了分鍾數):
select dateadd(hour, datediff(hour, 0, getdate()), 0)
從那里開始,您需要一個CASE
表達式來評估所討論的時間屬於哪個小時的四分位數(此處只是一個片段):
case
when datepart(minute, dtm) > 50 then 60
when datepart(minute, dtm) > 35 then 45
when datepart(minute, dtm) > 20 then 30
when datepart(minute, dtm) > 5 then 15
else 0
end
將這兩部分與DATEADD
放在一起,以決定我們將添加到該偶數小時標記的分鍾數:
declare @dtms table (dtm datetime);
insert @dtms (dtm)
values ('2019-07-16T12:05:00'),
('2019-07-16T12:06:00'),
('2019-07-16T12:21:00'),
('2019-07-16T12:29:00'),
('2019-07-16T12:35:00'),
('2019-07-16T12:38:00'),
('2019-07-16T12:56:00')
select
dtm,
dateadd(minute,
case
when datepart(minute, dtm) > 50 then 60
when datepart(minute, dtm) > 35 then 45
when datepart(minute, dtm) > 20 then 30
when datepart(minute, dtm) > 5 then 15
else 0
end, dateadd(hour, datediff(hour, 0, dtm), 0)) as rounded
from @dtms;
結果:
+-------------------------+-------------------------+
| dtm | rounded |
+-------------------------+-------------------------+
| 2019-07-16 12:05:00.000 | 2019-07-16 12:00:00.000 |
| 2019-07-16 12:06:00.000 | 2019-07-16 12:15:00.000 |
| 2019-07-16 12:21:00.000 | 2019-07-16 12:30:00.000 |
| 2019-07-16 12:29:00.000 | 2019-07-16 12:30:00.000 |
| 2019-07-16 12:35:00.000 | 2019-07-16 12:30:00.000 |
| 2019-07-16 12:38:00.000 | 2019-07-16 12:45:00.000 |
| 2019-07-16 12:56:00.000 | 2019-07-16 13:00:00.000 |
+-------------------------+-------------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.