我需要计算两个日期之间的工作日差异。在SQL Server中是否有内置函数?有人可以提供一个关于如何做到这一点的例子吗?如何计算工作日中两个日期之间的差异
-1
A
回答
0
这是我写的很快。把它封装成一个函数或任何你需要的东西。
declare @StartDate datetime
declare @EndDate datetime
declare @TotalDiff int
declare @NumberOfWeekends int
SET @StartDate = '3/12/2013'
SET @EndDate = '3/22/2013'
SET @NumberOfWeekends = 0
SET @TotalDiff = DATEDIFF(d,@StartDate, @EndDate)
If @TotalDiff > 7
SET @NumberOfWeekends = @TotalDiff/7
else if DATEPART(dd, @EndDate) < DATEPART(DD, @StartDate)
SET @NumberOfWeekends = 1
select (@TotalDiff - 2*@NumberOfWeekends) as TotalWorkDays
+1
这太简单了 - 只要将你的开始和结束日期改为连续的星期六,结果就是7而不是预期的5 – Jamiec 2013-03-15 11:48:00
0
没有,没有什么内置于SQL Server的直接给你的工作日数两个日期之间,但也有一些内置的功能,这将使你写一个。
首先,有几个注意事项
世界不能同意什么是“工作日”是。对我们大多数人来说,这是周六和周日。对于大多数中东地区来说,星期五是星期五&(周日是正常工作日)
世界当然不能就公共假日的构成达成一致,这几乎总是被视为非工作日。
您还没有指定您希望如何处理这些情况,从而让做一些假设:
- 周六和周日将非工作日
- 公共假期将不被考虑acount
现在,确定是否一个特定的天是周六或周日在SQL是容易的,给定类型的@date
DateTime
:
IF DATENAME(dw,@date) IN ('Saturday','Sunday')
考虑到这一点,给定一个开始和结束日期,你可以指望增量从@startDate
到@endDate
DECLARE @startDate DATETIME = '2013-01-01'
DECLARE @endDate DATETIME = '2013-01-20'
DECLARE @currDate DATETIME = @startDate
DECLARE @numDays INT = 0
WHILE @currDate<@endDate
BEGIN
IF DATENAME(dw,@currDate) NOT IN ('Saturday','Sunday')
SET @numDays = @numDays + 1
SET @currDate = DATEADD(day,1,@currDate)
END
SELECT @numDays
注:这是不可inclsive所以不会算@endDate
。你可以改变它是包容性的,通过改变WHILE @currDate<@endDate
到WHILE @currDate<[email protected]
相关问题
- 1. 在C#中,我如何计算两个日期之间的工作日差异?
- 2. 计算javascript中两个日历日期之间的差异
- 3. JScript:如何计算两个日期时间之间的差异?
- 4. 如何计算Objective-C中两个日期之间的差异?
- 5. 如何计算VB.net中两个日期之间的差异?
- 6. 如何计算IronPython中两个日期之间的差异?
- 7. 如何计算日期间隔中两行之间的差异?
- 8. 如何计算两个日期之间的差异
- 9. 如何计算两个日期之间的差异正确php
- 10. 如何用PHP计算两个日期之间的差异?
- 11. 如何使用Node.js计算两个日期之间的差异?
- 12. 如何计算两个日期之间的差异?
- 13. 计算MySQL中两个日期时间之间的差异
- 14. 计算MVC中两个日期时间之间的差异5
- 15. 计算两个日期之间的差异作为签名值
- 16. 计算两个日期字段的计数之间的差异
- 17. 如何计算Javascript中两个日期之间的年,月和日差异?
- 18. 计算日期之间的差异 - Postgres
- 19. C计算日期之间的差异
- 20. 计算PHP中两个日期之间的差异
- 21. 计算MySQL中两个日期条目之间的差异
- 22. 如何计算两个日期之间的总工作时间
- 23. 如何计算javascript中两个日期时间的差异?
- 24. 计算工作日期中以小时/分钟计的两个日期之间的差异
- 25. 如何计算两个日期之间的时间差 - MySql
- 26. 如何计算两个日期之间的时间差? - MySql
- 27. 两个日期之间的计算差异MySQL/Python
- 28. 使用Groovy计算两个日期之间的月差异
- 29. 计算两个日期之间的差异
- 30. 试图计算两个日期之间的差异
你能不能给这两个日期和您预期的结果的例子吗? – 2013-03-15 11:43:55
想要考虑公众假期吗?如果是这样,你需要一张表来存储他们,因为他们按国家/地区更改。 – Jamiec 2013-03-15 11:44:58
你意识到你已经标记为正确的答案,它给出了完全不正确的结果?只需插入'3/16/2013'和'3/23/2013'作为开始和结束日期(即周六至周六)。你期望有多少个工作日 - 我希望是'5'。你标出的答案给出了'7' – Jamiec 2013-03-15 12:05:18