2014-01-08 100 views
2

我是MySQL的新手。我在下面有一些代碼可以從datefield中提取年份,但它從表格中回溯了所有年份,即2011,2012,2013年,因爲我只想要2013年。這是多年來的基本查詢:Extract函數的列別名

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不允許參加依靠WHERE子句中的列別名。施加此限制是因爲在評估WHERE子句時,列值可能尚未確定。

可以重複你WHERE子句中的EXTRACT()功能:

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