簡體   English   中英

SQL Server 2008中的查詢在SQL Server 2005中不起作用

[英]Query in SQL Server 2008 not working in SQL Server 2005

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上嘗試使用該查詢時,即使某些天位於HOLIDAY和EMPLOG表中,它也只顯示當前日期和前16天。

有人能幫助我嗎? 謝謝!

嘗試轉換Date變量-您正在將GetDate與不一定具有相同時間的Date進行比較:

left JOIN Holiday ON CAST(AllDates as Date) =  CAST(Holiday.HolDate as Date)

將所有日期都括起來,應該可以使用。 看看這個SQL Fiddle 在此示例中,我僅添加了1個假期,2013年1月21日(MLK)。

編輯-

嘗試使用convert(varchar, getdate(), 101)來對date進行CAST ,因為SQL Server 2005不支持Date類型。

這是更新的SQL:

left JOIN Holiday ON convert(varchar, AllDates, 101) =  convert(varchar, Holiday.HolDate, 101)

在所有日期轉換上執行此操作。 這是更新的小提琴

感謝@ user148298指出這一點。

祝好運。

嘗試將@MyDate初始化更改為:

set @MyDate = Convert(DATETIME(CONVERT(VARCHAR(10), GETDATE(), 121) + ' 00:00:00', 121);

說明:這樣,您將@MyDate設置為“今天午夜”,而不是“今天與當前時間”。 這樣,最好將其與表連接。

假設:假期表中的日期存儲為“午夜”

2008年和2005年之間似乎存在一些差異。您必須設置數據庫兼容性。 請參閱以下文章:

http://msdn.microsoft.com/en-us/library/bb510680.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM