【问题标题】:Calculations excluding weekends计算不包括周末
【发布时间】:2014-03-31 14:37:51
【问题描述】:

我正在尝试制作一个假期预订应用程序,它运行一个 JQuery UI 日历。他们选择的开始日期和结束日期将传递给 SQL,SQL 将假期放入请求的表中。唯一的问题是,如果我输入了开始日期和结束日期,则没有考虑到周末。该系统的每个用户每个日历年都有 21 天的假期津贴,它也会扣除周末的假期。这是当前代码。

SET @DateDiff = (DATEDIFF(Day,@StartDate,@EndDate) +1)

上面是日期差异语句,下面是插入代码

BEGIN
    INSERT INTO Holidays(EmployeeID, StartDate, EndDate, Duration,Status)
    VALUES(@EmployeeID, @StartDate, @EndDate, @DateDiff,'PE')

    UPDATE Employees
    SET AnnualDaysHolidayAllowance = AnnualDaysHolidayAllowance - @DateDiff
    WHERE ID = @EmployeeID
    SELECT 'successful' AS result
END

有更多用于业务检查和规则的代码,但这是我需要尝试修复的唯一部分。我对编码比较陌生,所以如果可能的话,请留下解释以帮助我理解修复,谢谢。

【问题讨论】:

  • 你使用什么 RDBS?
  • 您是否仅需要考虑周末,或者您所在地区是否有“标准”假期也应该考虑在内?如果是后者,它通常是一个指向创建日历表的指针,该表可以包含周末、标准假期甚至是您组织特定的其他特殊事件的信息。
  • RDBS 在我看来像 MS-SQL...
  • 添加了 sql-server 标记,因为语法看起来确实像 SQL Server。
  • 看看这篇文章 - 它应该会有所帮助... [堆栈溢出文章][1] [1]:stackoverflow.com/questions/252519/…

标签: sql sql-server date datediff weekend


【解决方案1】:

在发布的链接上找到了解决方案。 来源:Count work days between two dates 答案(不是我自己的作品)

    SET @DateDiff = (SELECT
                    (DATEDIFF(dd, @StartDate, @EndDate) + 1)
                    -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
                    -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
                    -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多