我只希望从当前年份和前一年获得日期。因此,如果是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
提前感谢您提供任何帮助
答案 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