2014-01-08 4 views
2

Я новичок в MySQL. У меня есть код ниже, который работает, чтобы извлечь год из поля даты, но он возвращает все годы из таблицы, то есть 2011, 2012, 2013, где, поскольку я хочу только 2013. Это основной запрос, который работает в течение многих лет:Атрибут столбца из функции извлечения

SELECT EXTRACT(YEAR FROM startDate) FROM events_events where EventOwnerId = 206 

Это мой запрос, где я пытался создать псевдоним и вернуться только 2013 года, но он не работает:

SELECT EXTRACT(YEAR FROM startDate) as d_year 
FROM events_events 
where EventOwnerId = 206 AND d_year = 2013 
+0

Вы также можете быть заинтересованы в [год] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_year) – Phil

ответ

2

Как указано под Problems with Column Aliases:

Стандартный SQL отклоняет refe rences для псевдонимов столбцов в предложении WHERE. Это ограничение наложено, поскольку, когда оценивается условие WHERE, значение столбца может еще не определено.

Вы могли повторить функцию EXTRACT() в вашей статье WHERE:

SELECT EXTRACT(YEAR FROM startDate) AS d_year 
FROM events_events 
WHERE EventOwnerId = 206 
    AND EXTRACT(YEAR FROM startDate) = 2013 

Однако это не особенно эффективным, поскольку MySQL должен вычислить результат функции для каждой записи (что требует полного сканирование таблицы). Если индекс startDate будет использоваться, было бы лучше, чтобы отфильтровать даты в пределах требуемого диапазона:

SELECT EXTRACT(YEAR FROM startDate) AS d_year 
FROM events_events 
WHERE EventOwnerId = 206 
    AND startDate >= '2013-01-01' 
    AND startDate < '2014-01-01' 
0

Это должно работать

SELECT EXTRACT(YEAR FROM startDate) as d_year 
FROM events_events 
where EventOwnerId = 206 AND EXTRACT(YEAR from startDate) = 2013 
Смежные вопросы