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

Jak porównać datetime tylko z datą w SQL Server

NIE ulegaj pokusie robienia takich rzeczy:

Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

To lepszy sposób:

Select * from [User] U 
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')

zobacz:Co tak naprawdę oznacza słowo „SARGable”?

EDYCJA + Istnieją 2 podstawowe powody, dla których warto unikać używania funkcji na danych w klauzuli WHERE (lub w warunkach złączenia).

  1. W większości przypadków użycie funkcji na danych do filtrowania lub łączenia uniemożliwia optymalizatorowi dostęp do indeksu w tym polu, przez co zapytanie jest wolniejsze (lub bardziej "kosztowne")
  2. Drugim jest to, że dla każdego wiersza danych wykonywanych jest co najmniej jedno obliczenie. Może to być dodanie setek, tysięcy lub wielu milionów obliczeń do zapytania, abyśmy mogli porównać je z jednym kryterium, takim jak 2014-02-07 . Znacznie efektywniej jest zmienić kryteria, aby dopasować je do danych.

„Zmiana kryteriów w celu dopasowania do danych” to mój sposób na opisanie „użyj SARGABLE predykaty"

I nie używaj między nimi.

najlepszą praktyką z zakresami dat i godzin jest unikanie POMIĘDZY i zawsze używaj formularza:

WHERE col>='20120101' AND col <'20120201' Ten formularz działa ze wszystkimi typami i wszystkimi dokładnościami, niezależnie od tego, czy ma zastosowanie część czasu.

http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (Itzik Ben-Gan)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączenie aplikacji ASP.NET core z lokalną instancją SQLServer

  2. Jak uzyskać dane wyjściowe eksportu w rzeczywistym formacie CSV w SQL Server Management Studio?

  3. Jak w programie SQL Server wygenerować instrukcję CREATE TABLE dla danej tabeli?

  4. 4 sposoby na wyświetlenie listy wszystkich widoków w bazie danych SQL Server

  5. Najlepszy sposób na niszczenie danych XML w kolumnach bazy danych SQL Server