Mysql 提取函数中的列别名

Mysql 提取函数中的列别名,mysql,Mysql,我是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 F

我是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
如以下文件所述:

标准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'
选择提取(起始日期起的年份)作为d_年
来自事件
其中EventOwnerId=206
和起始日期>='2013-01-01'
和开始日期<'2014-01-01'
这应该行得通

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

您也可能对该函数感兴趣