Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est l'efficacité de la fonction YEAR(date) ?

Il n'est pas nécessaire d'avoir une colonne calculée pour "rechercher dans une table" les lignes qui correspondent à une année. Écrivez-vous une clause where en utilisant un intervalle à la place et ayez un index sur votre colonne de date.

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

Si vous souhaitez utiliser un entier (année) comme argument de la requête au lieu de deux chaînes, vous pouvez utiliser dateadd . Assurez-vous simplement que vous n'appliquez aucune fonction/manipulation à la colonne ActivityDate car SQL Server ne pourra pas utiliser l'index si vous le faites.

declare @Year int = 2011

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