首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >时间戳之间的求和

时间戳之间的求和
EN

Stack Overflow用户
提问于 2014-08-28 04:00:03
回答 1查看 22关注 0票数 0

我有一个基于时间戳的数据集,即startdate、enddate。我想计算两个时间戳之间的营业小时数,比如说一个典型的(M-F,8-5)周。

例如,如果一张票在星期一早上8:00进来,星期二上午9:00关闭,我希望语句显示10小时。我还需要从计算中省略周末。有人能推荐一种解决这个问题的方法吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 04:15:06

作为一个例子(在我面前没有你的表结构),这是我根据我为generating rows for time做的另一个答案得出的结论。

代码语言:javascript
运行
复制
declare @datetimes table (id int primary key identity(1,1), startdatetime datetime, enddatetime datetime)
insert into @datetimes (startdatetime,enddatetime) values
      ('2014-08-26 08:00:00','2014-08-27 09:00:00')
    , ('2014-07-16 08:00:00','2014-07-28 09:00:00')

declare @defaultDayStart time = '08:00:00', @defaultDayEnd time = '17:00:00'

select T.ID, sum(Z.ShadowHours)
from (
        select id, startdatetime, enddatetime, datediff(hh,startdatetime,enddatetime) TotalTime
        from @datetimes 
    ) T
    CROSS APPLY (
            SELECT
                RowID-1 AS ShadowDays
                , CASE
                    WHEN DATENAME(dw,DATEADD(dd, RowID - 1,t.startdatetime)) IN ('Saturday', 'Sunday') THEN 0
                    ELSE DATEDIFF(hh, CASE RowID WHEN MIN(RowID)OVER(PARTITION BY t.id) THEN t.startdatetime ELSE CONVERT(DATETIME,CONVERT(DATE, DATEADD(dd, RowID - 1,t.startdatetime))) + @defaultDayStart END
                            , CASE RowID WHEN MAX(RowID)OVER(PARTITION BY t.id) THEN t.enddatetime ELSE CONVERT(DATETIME,CONVERT(DATE, DATEADD(dd, RowID - 1,t.startdatetime))) + @defaultDayEnd END
                            )
                END AS ShadowHours
                , DATENAME(dw,DATEADD(dd, RowID - 1,t.startdatetime)) wd
            FROM (
                SELECT ROW_NUMBER()OVER(ORDER BY S.NAME) AS RowID
                FROM master..spt_values S
                ) X
            WHERE DATEDIFF(dd,startdatetime,enddatetime) + 1 >= RowID
        ) Z
GROUP BY T.id

这个示例很简单,并且没有使用包含例如假日的日程表。这也没有计算午餐时间,因为大多数地方认为每天8小时不给予某种形式的用餐休息是非法的。这些都是您可能会被要求调整的考虑因素。编辑您的问题,如果您希望在此领域获得帮助,请给我留下评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25535948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档