2017-02-01 147 views
-1

我試圖執行下面的代碼:是否可以在CTE中使用Declare?

;with cte as 
( 
    select 
     convert(varchar(50), joiningdate, 101) as joindate 
    from 
     employeedetail 
) 
declare @dateuse varchar(200)=cte.joindate 
select datediff(dd, @dateuse, GETDATE()) 
from cte 

,但它顯示了一個錯誤:

Msg 156, Level 15, State 1, Line 909
Incorrect syntax near the keyword 'declare'.

我想用持有的joindate值可變,並根據返回的值。怎麼樣?

+0

爲什麼不能你剛纔計算ie'with CTE爲選擇查詢(...)選擇DATEDIFF(DD,joindate ,getdate())從cte'? –

+0

是的,我可以通過你的建議做到這一點,但我想通過使用變量 –

+0

來做到這一點,但問題的確是:**爲什麼**你將看起來是DATE或DATETIME列的內容轉換爲「 VARCHAR(50)',然後你想在'DATEDIFF'函數中使用它 - 這使得**毫無意義**!只需將該列保留爲'DATE' /'DATETIME'並應用'DATEDIFF'即可。 –

回答

0

您只能在腳本,過程或UDF中使用聲明。不能用於查詢或視圖。

在這種情況下,您似乎甚至不需要CTE或類型轉換。此查詢會告訴你的僱員有多少天了,這似乎像周圍的目標:

select datediff(dd, joningdate, getdate()) from employeedetail 
相關問題