SQL Server - 仅当它们属于当前年份或上一年时才选择年份

时间:2011-01-12 16:36:03

标签: sql-server date

我只希望从当前年份和前一年获得日期。因此,如果是2011年,我会在2011年获得日期,并在2010年开始。如果是2012年,我会在2012年和2011年获得日期。

SELECT 
   DISTINCT DATEPART(yyyy, date ) as arc_year 
FROM 
   dbo.sports 
WHERE 
   team_id = '".$id."' 
ORDER BY 
   DATEPART(yyyy, date ) DESC

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:3)

您希望避免在列本身上使用函数,以便可以使用索引。

... WHERE date >= DATEADD(year,DATEDIFF(year,0,getdate()) - 1,0) 
      and date <  DATEADD(year,DATEDIFF(year,0,getdate()) + 1,0) ...

答案 1 :(得分:2)

一些事情。首先,你永远不应该以这种方式编写查询。使用参数化查询。你的所有内容都写着“sql注入”。

其次,最好的方法是:

declare @teamid int = -- some value

select * from sports 
  where (team_id = @teamid)
  and date > DATEADD(year,DATEDIFF(year,0,getdate()) - 1,0) 

如果日期列可以包含大于当前年份的值,则查询将为:

declare @startdate datetime = DATEADD(year,DATEDIFF(year,0,getdate()) - 1,0) 
declare @enddate datetime = DATEADD(year,+1,@startdate)
declare @teamid int = -- some value

select * from sports 
where (team_id = @teamid)
and date BETWEEN @startdate and @EndDate