Mysql 提取函数中的列别名
我是MySQL新手。下面我有一些代码,可以从日期字段中提取年份,但它会从表中返回所有年份,即2011年、2012年、2013年,我只想要2013年。这是多年有效的基本查询: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
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
您也可能对该函数感兴趣