Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Quanto è efficiente la funzione ANNO(data)?

Non è necessario disporre di una colonna calcolata per "cercare in una tabella" le righe che corrispondono a un anno. Scrivi la clausola where utilizzando invece un intervallo e metti un indice nella colonna della data.

select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
      ActivityDate < '20120101'

Se vuoi usare un int (anno) come argomento della query invece di due stringhe puoi usare dateadd . Assicurati solo di non applicare alcuna funzione/manipolazione alla colonna ActivityDate perché SQL Server non sarà in grado di utilizzare l'indice se lo fai.

declare @Year int = 2011

select SomeColumn
from YourTable
where ActivityDate >= dateadd(year, @Year-1900, 0) and
      ActivityDate < dateadd(year, @Year-1899, 0)