sql通过打开和关闭时间范围来计算工作日的工作时间

小龙

我想计算给定日期范围(营业日和营业日)之间的营业时间

例如:营业时间

ID WeekName OpeningHour ClosingHour

01 Monday 8.00AM 4.00PM

02 Tuesday 8.00AM 4.00PM

03 Wednesday 8.00AM 4.00PM

04 Thursday 8.00AM 4.00PM

05 Friday 8.00AM 4.00PM

例如,如果我指定日期范围,
营业时间:2014年1
月4日09.00上午营业时间:2014年3月4日上午14.00

我要计算给定日期范围内的营业时间,给定范围之间有3天

2014年1月4日

2014年2月4日

2014/03/04

首先,我想检查日期名称并从营业时间(从上表)计算小时。

2014年1月4日-星期二

2014年2月4日-星期三

2014/03/04-星期四

我期望的结果:

GivenDate DayID DayName DateDiff

01/04/2014 01 Tuesday 7

02/04/2014 02 Wednesday 8

03/04/2014 03 Thursday 6

在这里,在Stackoverflow上,通常问一个问题,并期望别人为您做您的工作是不受欢迎的。您至少应该显示一些最小的努力,例如到目前为止已经尝试过的一些SQL。

就是说,这是将返回所需内容的查询。即使没有日期(日历)表,此查询也可以使用,因为它会从系统表中生成数字序列。然后,将这些数字依次添加到开始日期,以返回该间隔中每一天的一条记录:

SELECT * INTO #WorkingHours 
FROM (VALUES (1, 'Monday', '08:00', '16:00')
    ,(2, 'Tuesday', '08:00', '16:00')
    ,(3, 'Wednesday', '08:00', '16:00')
    ,(4, 'Thursday', '08:00', '16:00')
    ,(5, 'Friday', '08:00', '16:00'))
E(DayId, DayName, OpeningHour, ClosingHour)

DECLARE @StartDate DATETIME = '2014-04-01 09:00:00'
DECLARE @EndDate DATETIME = '2014-04-03 14:00:00'

SELECT [GivenDate], [DayID], [DayName],
    DATEDIFF(HOUR, CASE WHEN @StartDate > [OpeningDateTime] THEN @StartDate ELSE [OpeningDateTime] END, 
        CASE WHEN @EndDate < [ClosingDateTime] THEN @EndDate ELSE [ClosingDateTime] END) AS [DateDiff]
FROM (
    SELECT CAST(@StartDate + n - 1 AS DATE) AS [GivenDate]
        , n AS [DayID]
        , DATENAME(dw, @StartDate + n - 1) AS [DayName]
        , CAST(CAST(CAST(@StartDate + n - 1 AS DATE) AS VARCHAR) + ' ' + OpeningHour AS DateTime) AS OpeningDateTime
        , CAST(CAST(CAST(@StartDate + n - 1 AS DATE) AS VARCHAR) + ' ' + ClosingHour AS DateTime) AS ClosingDateTime
    FROM    
        -- Numbers, for expanding the date range:
        (SELECT ROW_NUMBER() OVER (ORDER BY object_id) n FROM sys.all_objects) Numbers
    INNER JOIN #WorkingHours ON DayName = DATENAME(dw, @StartDate + n - 1)
    WHERE Numbers.n <= DATEDIFF(d, @StartDate, @EndDate) + 1
) SubQuery

这是结果输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算工作时间

来自分类Dev

计算时间范围内的工作日

来自分类Dev

午夜关闭 - 工作时间

来自分类Dev

计算直到工作日的时间

来自分类Dev

根据工作日和小时数 + 假期将工作时间添加到正确的价格类别

来自分类Dev

如何将工作时间转换为工作日?

来自分类Dev

根据一天应该工作的时间来计算一天的工作时间

来自分类Dev

SQL仅在AVG计算中包括工作时间

来自分类Dev

使用重叠事件计算工作时间(SQL)

来自分类Dev

通过EWS为用户提供的时区和工作时间

来自分类Dev

在工作日的工作时间内绘制时间序列的百分位数

来自分类Dev

Oracle SQL - 如何计算两个日期之间的工作时间和分钟数

来自分类Dev

用PHP计算工作时间的时差

来自分类Dev

从工作时间计算成本

来自分类Dev

在Oracle中计算工作时间

来自分类Dev

SQL-结果从工作日(时间)和周(无时间)开始

来自分类Dev

在熊猫中,如何根据特定的工作日和时间范围进行过滤

来自分类Dev

查询工作时间

来自分类Dev

包含工作时间的日期时间列表,计算非工作时间

来自分类Dev

解释工作时间和休息时间的日期时间

来自分类Dev

使用时间戳计算员工的工作时间

来自分类Dev

使用熊猫按时间序列计算的工作时间

来自分类Dev

用工作时间计算结束时间,并跳过周末

来自分类Dev

使用Excel跟踪工作计划并计算工作时间

来自分类Dev

在计算工作时间和工作超级小时时,Excel中的行为异常。

来自分类Dev

基于SQL Server班次的工作日,周末,公共假日和一天中的时间

来自分类Dev

SQL查询基于时间戳选择按小时(col)和工作日(行)分组的值

来自分类Dev

如何在Laravel中使用口才来计算特定日期的工作时间?

来自分类Dev

按工作日分开时间间隔

Related 相关文章

  1. 1

    计算工作时间

  2. 2

    计算时间范围内的工作日

  3. 3

    午夜关闭 - 工作时间

  4. 4

    计算直到工作日的时间

  5. 5

    根据工作日和小时数 + 假期将工作时间添加到正确的价格类别

  6. 6

    如何将工作时间转换为工作日?

  7. 7

    根据一天应该工作的时间来计算一天的工作时间

  8. 8

    SQL仅在AVG计算中包括工作时间

  9. 9

    使用重叠事件计算工作时间(SQL)

  10. 10

    通过EWS为用户提供的时区和工作时间

  11. 11

    在工作日的工作时间内绘制时间序列的百分位数

  12. 12

    Oracle SQL - 如何计算两个日期之间的工作时间和分钟数

  13. 13

    用PHP计算工作时间的时差

  14. 14

    从工作时间计算成本

  15. 15

    在Oracle中计算工作时间

  16. 16

    SQL-结果从工作日(时间)和周(无时间)开始

  17. 17

    在熊猫中,如何根据特定的工作日和时间范围进行过滤

  18. 18

    查询工作时间

  19. 19

    包含工作时间的日期时间列表,计算非工作时间

  20. 20

    解释工作时间和休息时间的日期时间

  21. 21

    使用时间戳计算员工的工作时间

  22. 22

    使用熊猫按时间序列计算的工作时间

  23. 23

    用工作时间计算结束时间,并跳过周末

  24. 24

    使用Excel跟踪工作计划并计算工作时间

  25. 25

    在计算工作时间和工作超级小时时,Excel中的行为异常。

  26. 26

    基于SQL Server班次的工作日,周末,公共假日和一天中的时间

  27. 27

    SQL查询基于时间戳选择按小时(col)和工作日(行)分组的值

  28. 28

    如何在Laravel中使用口才来计算特定日期的工作时间?

  29. 29

    按工作日分开时间间隔

热门标签

归档