2011-03-04 3 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 버전을 사용하고 있습니까? –

+0

@ 브라이언 즈. SQL Server 2005 – atrljoe

답변

3

:


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 : 인라인보기

당신은 WHERE 절에 SelMonth 및 CurMonth 사용할 수 없습니다
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)