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

Najlepsze podejście do usuwania części czasu z datetime w SQL Server

Ś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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server zużywa dużo procesora podczas wyszukiwania wewnątrz ciągów nvarchar

  2. Podziel wartość jednej kolumny na wartości wielu kolumn

  3. Znajdź skojarzenia między kontami pocztowymi bazy danych a zasadami bazy danych w SQL Server (T-SQL)

  4. Jak usunąć akcenty i wszystkie znaki <> a..z w sql-server?

  5. Jak zainstalować SQL Server na komputerze Mac