sqlserver计算两个日期之前的工作日天数,需要排除周末和法定节假日
时间: 2024-09-11 08:18:24 浏览: 78
在SQL Server中,计算两个日期之间的工作日天数通常涉及到自定义函数或者使用存储过程,因为SQL本身的日期函数并不直接提供这样的功能。你需要创建一个逻辑来处理周末和非工作假期。这里是一个简单的示例,假设你有一个包含所有法定假日的表`HolidayCalendar`:
```sql
CREATE FUNCTION [dbo].[WorkDays] (@StartDate DATE, @EndDate DATE)
RETURNS INT
AS
BEGIN
DECLARE @WorkingDays INT = DATEDIFF(day, @StartDate, @EndDate) + 1; -- 总天数包括结束当天
SET @StartDate = DATEADD(day, -1, @StartDate); -- 将开始日期减1
WHILE @StartDate < @EndDate
BEGIN
IF NOT EXISTS (SELECT 1 FROM HolidayCalendar WHERE HolidayDate = @StartDate) -- 非周末且非法定假日
SET @WorkingDays -= 1;
SET @StartDate = DATEADD(day, 1, @StartDate);
END
RETURN @WorkingDays;
END
```
你可以通过调用这个函数来获取两个日期之间的工作日天数:
```sql
SELECT dbo.WorkDays('2023-01-01', '2023-02-01') AS WorkDaysBetweenDates;
```
阅读全文