Ściślej, metoda a
jest najmniej zasobożerny:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Udowodniono mniejsze obciążenie procesora przy takim samym całkowitym czasie trwania miliona wierszy przez kogoś, kto ma zbyt dużo czasu:Najskuteczniejszy sposób w SQL Server na uzyskanie daty z daty i godziny?
Widziałem podobny test gdzie indziej z podobnymi wynikami.
Wolę DATEADD/DATEDIFF, ponieważ:
- varchar podlega problemom z językiem/formatem daty
Przykład:dlaczego moje wyrażenie CASE jest niedeterministyczne? - float opiera się na pamięci wewnętrznej
- rozciąga się na pierwszy dzień miesiąca, jutro itd. poprzez zmianę podstawy „0”
Edytuj, październik 2011
W przypadku SQL Server 2008+ możesz przesłać do date
tj. CAST(getdate() AS date)
. Lub po prostu użyj date
typ danych, więc nie ma time
usunąć.
Edytuj, styczeń 2012
Praktyczny przykład tego, jak elastyczne jest to:trzeba obliczyć według zaokrąglonej godziny lub daty na serwerze sql
Edytuj, maj 2012
Nie używaj tego w klauzulach WHERE i podobnych bez zastanowienia:dodanie funkcji lub CAST do kolumny unieważnia użycie indeksu. Zobacz numer 2 tutaj Typowe błędy programowania SQL
Teraz mamy przykład późniejszych wersji optymalizatora SQL Server, które do tej pory prawidłowo zarządzały CAST, ale ogólnie to będzie zły pomysł...
Edytuj, wrzesień 2018 r., dla datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)