DECLARE @MyDate Datetime
set @MyDate = GETDATE();
WITH cte AS
(SELECT @MyDate AS AllDates,
1 AS [count_all_days],
CASE WHEN DATENAME(dw, DATEADD(dd, - 1, @MyDate)) IN ('Saturday', 'Sunday') THEN 1 ELSE 0 END AS [count_week_days]
UNION ALL
SELECT DATEADD(dd, - [count_all_days], @MyDate),
[count_all_days] + 1,
CASE WHEN DATENAME(dw, DATEADD(dd, - [count_all_days], @MyDate)) IN ('Saturday', 'Sunday') THEN [count_week_days] + 1 ELSE [count_week_days]
END
FROM cte
WHERE [count_all_days] - [count_week_days] < 16
)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, AllDates))
FROM cte left join EmpLog ON AllDates = EmpLog.Date
left JOIN Holiday ON AllDates = Holiday.HolDate
WHERE DATENAME(dw, AllDates) NOT IN ('Saturday', 'Sunday')AND AllDates NOT IN (Select EmpLog.Date from EmpLog where EmpLog.EmpID = 1)and Holiday.HolDate IS NULL
此 SQL 查询显示当前日期和前 16 天。其中这些日期不等于 HOLIDAY 表和表中的现有日期EMPLOG
。
我的问题是这个查询在 SQL Server 2008 上运行良好,但是当我在 SQL Server 2005 上尝试它时,它只显示当前日期和前 16 天,即使有些日子在 HOLIDAY 和EMPLOG
表中。
有人能帮助我吗?谢谢!