Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wydajna jest funkcja ROK(data)?

Nie ma potrzeby posiadania kolumny obliczeniowej, aby „przeszukać tabelę” w celu znalezienia wierszy pasujących do jednego roku. Napisz klauzulę where, używając zamiast tego interwału i umieść indeks w kolumnie daty.

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

Jeśli chcesz użyć int (rok) jako argumentu do zapytania zamiast dwóch ciągów, możesz użyć dateadd . Upewnij się tylko, że nie stosujesz żadnych funkcji/manipulacji do kolumny ActivityDate, ponieważ SQL Server nie będzie w stanie użyć indeksu, jeśli to zrobisz.

declare @Year int = 2011

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. niekodowane Count(*) vs tabele systemowe

  2. Jak włączyć SQL Server Agent XP za pomocą T-SQL?

  3. Błąd połączenia MS Access VBA z SQL Server

  4. Wprowadzenie do OPENJSON z przykładami (SQL Server)

  5. SELECT ONE Row z wartością MAX() w kolumnie