Справка по SQL DATEPART - PullRequest
       2

Справка по SQL DATEPART

0 голосов
/ 04 марта 2011

Что не так с этим оператором SQL?Я получаю, что SelMonth и CurMonth являются недопустимыми столбцами, неправильно ли я выполняю условие Where?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)

Спасибо

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Вы не можете использовать SelMonth и CurMonth в предложении WHERE:


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 голосов
/ 04 марта 2011

Поскольку 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...