2015-04-08 2 views
0

я получил ошибку о том, где пункт «X», когда выполнить этот запросСравните две даты внутри, где положение

select top 100 DATEADD(HOUR,10, DateCreated) as X 
from y 
where X between '2015 -03-31 ' and '2015 -04 -02' 
order by DateCreated desc 
+1

вы не можете использовать псевдоним в ' WHERE', вы должны использовать полное поле, то есть 'DATEADD (HOUR, 10, DateCreated)' также, mys ql не поддерживает синтаксис стиля «TOP 100», поэтому либо ваши теги ошибочны, либо ваш запрос там тоже неправильный –

+0

Используйте DATEADD (HOUR, 10, DateCreated) в where where вместо X – sayani

+0

okay..i am query table y на сервере db ... когда я выполняю тот же запрос, я получил сообщение об ошибке «Недопустимое имя столбца« X » – makoz

ответ

4

Логический порядок этапов обработки запроса:

  1. ОТ
  2. ГДЕ
  3. GROUP BY
  4. HAVING
  5. ВЫБОР
  6. ORDER BY

Как видите, SELECT происходит после WHERE. Таким образом, вы не можете использовать какие-либо псевдонимы вашей части SELECT в статье WHERE. Вы можете использовать только псевдонимы в ORDER BY.

Ваш запрос должен быть таким:

SELECT TOP 100 DATEADD(HOUR, 10, DateCreated) AS X 
FROM y 
WHERE DATEADD(HOUR, 10, DateCreated) BETWEEN '2015-03-31' AND '2015-04-02' 
ORDER BY DateCreated DESC 

Кроме того, я предлагаю вам использовать

WHERE DATEADD(HOUR, 10, DateCreated) >= '2015-03-31' 
AND DATEADD(HOUR, 10, DateCreated) <= '2015-04-02' 

LOGICAL QUERY PROCESSING

What do BETWEEN and the devil have in common?

1

X это имя псевдоним столбца, так что вы не можете использовать его непосредственно в пункте, где.

select top 100 DATEADD(HOUR,10, DateCreated) as X 
from Table_1 
where DATEADD(HOUR,10, DateCreated) between '2015 -03-31 ' and '2015 -04 -02' 
order by DateCreated desc 
Смежные вопросы