2011-03-04 204 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)