我是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 :(得分: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