sql >> Databasteknik >  >> RDS >> Sqlserver

Hur effektiv är YEAR(date)-funktionen?

Det finns inget behov av att ha en beräknad kolumn för att "söka i en tabell" efter rader som matchar ett år. Skriv din where-sats med ett intervall istället och ha ett index på din datumkolumn.

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

Om du vill använda en int (år) som argument till frågan istället för två strängar kan du använda dateadd . Se bara till att du inte tillämpar några funktioner/manipulationer på kolumnen ActivityDate eftersom SQL Server inte kommer att kunna använda indexet om 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 - GROUP flera rader med bibehållen skillnader

  2. MySQL &PHP - Inte unik tabell/alias

  3. Hur man använder rownum

  4. Hur kan jag använda SQLs YEAR(), MONTH() och DAY() i Doctrine2?