我希望在两个日期之间的工作日数。例如,如果我们有01-01-2012和20-01-2012,我想要使用T-SQL获取这两个日期之间的工作日数。两个日期之间的工作日数
回答
由于SQL Server不知道贵公司的工作日是什么,所以对这个问题的最佳答案很可能是使用calendar table。一旦你过去和将来的日期表,与像IsWorkDay
正确更新一栏,查询很简单:
相关/可能重复日历表是真正处理“工作日”概念含糊不清的最佳选择。 –
这个答案中的链接是死的,有没有可以链接到它的存档? –
@詹姆斯抱歉,已更新。一群邪恶的人接管了这个领域,并装上了废话。 –
DECLARE @fromDate datetime, @toDate datetime
SELECT @fromDate = ' 01-01-2012', @toDate = '20-01-2012'
SELECT (DATEDIFF(day, @fromDate, @toDate) + 1)
- (DATEDIFF(week, @fromDate, @toDate) * 2)
- (CASE WHEN DATENAME(weekday, @fromDate) = 'Sunday' THEN 1 ELSE 0 END)
- (CASE WHEN DATENAME(weekday, @toDate) = 'Saturday' THEN 1 ELSE 0 END)
这处理标准工作周(星期一至星期五),但不处理非工作日(假期,学校PA日等)。它还假定语言设置是“US_English”或类似的。你用不同的'SET DATEFIRST'设置测试过它吗? –
我喜欢亚伦Bertrand的建议,所以我写了这个代码,可以添加到您的查询。它会在两个日期之间创建一个表变量,然后通过加入CalendarDate列,您可以在查询中使用它(只需记住在加入之前删除任何时间信息)。这是基于周一至周五典型的美国工作周。
DECLARE @StartDate DATE
DECLARE @EndDate DATE
SET @StartDate = '2013-08-19'
SET @EndDate = '2013-08-26'
DECLARE @BusinessDay TABLE
(
CalendarDate DATETIME,
IsBusinessDay INT
)
DECLARE @Counter DATETIME = @StartDate
WHILE(@Counter <= @EndDate)
BEGIN
INSERT INTO @WorkDays
SELECT @Counter, CASE WHEN DATENAME(WEEKDAY, @Counter) NOT IN ('Saturday', 'Sunday') THEN 1 ELSE 0 END
SET @Counter = DATEADD(DAY, 1, @Counter)
END
SELECT * FROM @BusinessDay
缺点是这必须重新为每个需要的查询,所以如果你经常这样做,一个固定的表可能是一个更好的路要走。
它可以用来像这样....
SELECT
BusinessDays = SUM(IsBusinessDay)
FROM
@BusinessDay
WHERE
CalendarDate BETWEEN @StartDate AND @EndDate
这会给你的两个日期之间的工作日数。像其他许多人所说,这显然不考虑任何假期或我的生日。
基于前面的代码,我调整它以排除最后一天(没问,但我需要它)。
select (DATEDIFF(dd,@fromDate, @toDate))
- (DATEDIFF(ww,@fromDate, DATEADD(dd,-1,@toDate)) * 2)
- (CASE WHEN DATENAME(dw, @fromDate) = 'Sunday' THEN 1 else 0 end)
- (CASE WHEN DATENAME(dw, @toDate) = 'Sunday' THEN 1 else 0 end)
我通过使用含有这些日期
- (select count(distinct dcsdte)
from calendar_table
where dcsdte between @fromDate
and @toDate)
- 1. 想要统计两个日期之间的工作日数
- 2. 两个日期之间的工作日数[LOGIC]
- 3. 获取两个日期之间的工作日时间?
- 4. 在两个日期之间的某个工作日获取日期
- 5. SQLite:获取两个日期之间的平均工作日
- 6. 两个日期之间的SQL工作日
- 7. 计算两个日期之间的工作日
- 8. 查找SQL Server中两个日期之间的工作日
- 9. objective-c中两个日期之间的工作日?
- 10. 可可 - 计算两个日期之间的工作日
- 11. 两个日期之间的总工作日与自定义日期
- 12. python3.2)如何在两个日期之间找到工作日?
- 13. ColdFusion中两个日期之间的工作天数
- 14. T-SQL获取两个日期之间的工作天数
- 15. 两个字段中的两个日期之间的日期
- 16. 查找两个日期之间发生的日期日期
- 17. 两个日期之间的月数SAS
- 18. 两个日期之间的计数
- 19. 两个日期之间的总天数
- 20. 两个日期之间的月数
- 21. 如何计算两个日期之间的总工作时间
- 22. 计算两个日期之间的工作时间
- 23. 两个日期之间的特定月份/工作日的数量
- 24. 两个日期之间的特定日期的数量
- 25. 如何在两个日期之间获取Informix中的工作日数
- 26. 如何计算两个给定日期之间的工作日数
- 27. PLSQL-估计两个日期之间的特定工作日小时数
- 28. Oracle SQl Dev如何计算两个日期之间的工作日数
- 29. 在两个日期之间的日期数组
- 30. 两个日期之间的星期日数量?
做你的工作是什么天表中删除holydays?你有什么节日? – Paddy
**不相关:**下一次,请使用'sql-server'而不是'sql'和'server'来标记 –
首先必须知道有多少假期,然后totaldays - holidays = working days..please put your table结构 – Nighil