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

Hvor effektiv er funktionen ÅR(dato)?

Der er ingen grund til at have en beregnet kolonne for at "søge en tabel" efter rækker, der matcher et år. Skriv dig hvor-sætning ved at bruge et interval i stedet for, og hav et indeks på din datokolonne.

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

Hvis du vil bruge en int (år) som argument til forespørgslen i stedet for to strenge, kan du bruge dateadd . Bare sørg for, at du ikke anvender nogen funktioner/manipulationer på kolonnen ActivityDate, fordi SQL Server ikke vil være i stand til at bruge indekset, hvis du gør det.

declare @Year int = 2011

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


  1. MySQL-problem med at opdatere DATETIME-feltet fra ISO 8601-format

  2. Søg i MySQL med PHP og vis resultater på samme side

  3. enkelt forespørgsel, der skal slettes fra flere tabeller i sql-serveren

  4. php-fejl ved brug af lagret procedure