Extract函数的列别名

时间:2014-01-08 23:28:27

标签: 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 
FROM events_events 
where EventOwnerId = 206 AND d_year = 2013

2 个答案:

答案 0 :(得分:2)

正如Problems with Column Aliases所述:

  

标准SQL不允许在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'

答案 1 :(得分:0)

这应该有效

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