SQL Server - выбирайте годы, только если они приходятся на текущий или предыдущий год - PullRequest
0 голосов
/ 12 января 2011

Я хочу получить только даты текущего года и предыдущего года. Так что, если это 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 ]

3 голосов
/ 12 января 2011

Вы хотите избежать использования функции в самом столбце, чтобы можно было использовать индекс.

... WHERE date >= DATEADD(year,DATEDIFF(year,0,getdate()) - 1,0) 
      and date <  DATEADD(year,DATEDIFF(year,0,getdate()) + 1,0) ...
2 голосов
/ 12 января 2011

Пара вещей. Во-первых, вы никогда не должны писать запросы таким образом. Используйте параметризованные запросы. На вашем написано "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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...