簡體   English   中英

T-SQL:將時間四舍五入到15分鍾,但僅在15分鍾后5分鍾之后

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM