Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie effizient ist die YEAR(date)-Funktion?

Es ist keine berechnete Spalte erforderlich, um eine Tabelle nach Zeilen zu durchsuchen, die mit einem Jahr übereinstimmen. Schreiben Sie Ihre Where-Klausel stattdessen mit einem Intervall und haben Sie einen Index für Ihre Datumsspalte.

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

Wenn Sie anstelle von zwei Zeichenfolgen ein int (Jahr) als Argument für die Abfrage verwenden möchten, können Sie dateadd verwenden . Stellen Sie nur sicher, dass Sie keine Funktionen/Manipulationen auf die ActivityDate-Spalte anwenden, da SQL Server sonst den Index nicht verwenden kann.

declare @Year int = 2011

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