2011-03-04 119 views
0

此SQL語句有什麼問題?我不斷收到SelMonth和CurMonth是無效的列,我做我的Where子句錯了嗎? DATEPART在這裏引起問題嗎?SQL語句DATEPART幫助

SELECT TOP (5) 
    EName, EDate, EDateEnd, 
    DATEPART(month, EDate) AS SelMonth, 
    DATEPART(month, { fn CURDATE() }) AS CurMonth 
FROM   
    Events 
WHERE  
    (EDate >= { fn CURDATE() }) 
    AND (SelMonth = CurMonth) 

感謝

+0

您使用的是什麼版本的SQL? – 2011-03-04 16:11:10

+0

@BryanS。 SQL Server 2005 – atrljoe 2011-03-04 16:13:18

回答

3

您不能使用WHERE子句中的SelMonth和CurMonth:


SELECT TOP (5) 
     EName, EDate, EDateEnd, 
     DATEPART(month, EDate) AS SelMonth, 
     DATEPART(month, { fn CURDATE() }) AS CurMonth 
FROM Events 
WHERE (EDate >= { fn CURDATE() }) 
     AND (DATEPART(month, EDate) = DATEPART(month, { fn CURDATE() })) 
0

由於SelMonth和CurMonth是派生列在查詢目前的水平,他們將無法使用。 選項1:CTE(對於SQL 2005年及以上)

WITH evnts AS 
(SELECT ename, 
     edate, 
     edateend, 
     Datepart(MONTH, edate)   AS selmonth, 
     Datepart(MONTH, { fn CURDATE() }) AS curmonth 
FROM events) 
SELECT TOP (5) * 
    FROM evnts 
WHERE (EDate >= { fn CURDATE() }) AND (SelMonth = CurMonth) 

選項2:內嵌視圖

SELECT TOP (5) * FROM 
(SELECT ename, 
     edate, 
     edateend, 
     Datepart(MONTH, edate)   AS selmonth, 
     Datepart(MONTH, { fn CURDATE() }) AS curmonth 
FROM events) 

WHERE  (EDate >= { fn CURDATE() }) AND (SelMonth = CurMonth)