簡體   English   中英

用 datediff 和 substring 計算分鍾數

[英]Count the number of minutes with datediff and substring

我有這樣的數據

availabilities
[{"starts_at":"09:00","ends_at":"17:00"}]

我在下面有查詢,它有效

select COALESCE(availabilities,'Total')      as availabilities,
       SUM(DATEDIFF(minute,start_at,end_at)) as 'Total Available Hours in Minutes'
from (
    select cast(availabilities as NVARCHAR)             as availabilities,
           cast(SUBSTRING(availabilities,16,5) as time) as start_at,
           cast(SUBSTRING(availabilities,34,5) as time) as end_at
    from alfy.dbo.daily_availabilities
)x
GROUP by ROLLUP(availabilities);

結果

availabilities                                          Total Available Hours in Minutes
[{"starts_at":"09:00","ends_at":"17:00"}]                                            480

如果數據如下所示

availabilities
[{"starts_at":"10:00","ends_at":"13:30"},{"starts_at":"14:00","ends_at":"18:00"}]
[{"starts_at":"09:00","ends_at":"12:30"},{"starts_at":"13:00","ends_at":"15:30"},{"starts_at":"16:00","ends_at":"18:00"}]

如何計算兩個或多個時間范圍內的分鍾數?

由於您有 JSON 數據使用OPENJSON (Transact-SQL)來解析它,例如:

create table dbo.daily_availabilities (
  id int,
  availabilities nvarchar(max) --JSON
);

insert dbo.daily_availabilities (id, availabilities) values
  (1, N'[{"starts_at":"09:00","ends_at":"17:00"}]'),
  (2, N'[{"starts_at":"10:00","ends_at":"13:30"},{"starts_at":"14:00","ends_at":"18:00"}]'),
  (3, N'[{"starts_at":"09:00","ends_at":"12:30"},{"starts_at":"13:00","ends_at":"15:30"},{"starts_at":"16:00","ends_at":"18:00"}]');

select id, sum(datediff(mi, starts_at, ends_at)) as total_minutes
from dbo.daily_availabilities
cross apply openjson(availabilities) with (
  starts_at time,
  ends_at time
) av
group by id
ID 總分鍾數
1 480
2 450
3 480

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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