Streng genommen Methode a
ist am wenigsten ressourcenintensiv:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Erwiesenermaßen weniger CPU-intensiv für die gleiche Gesamtdauer von einer Million Zeilen von jemandem mit viel zu viel Zeit:Effizienteste Methode in SQL Server, um ein Datum aus Datum und Uhrzeit zu erhalten?
Ich habe auch anderswo einen ähnlichen Test mit ähnlichen Ergebnissen gesehen.
Ich bevorzuge DATEADD/DATEDIFF, weil:
- Varchar unterliegt Sprach-/Datumsformatproblemen
Beispiel:Warum ist mein CASE-Ausdruck nicht deterministisch? - float ist auf internen Speicher angewiesen
- erweitert, um den ersten Tag des Monats, morgen usw. zu berechnen, indem die Basis "0" geändert wird
Bearbeitet, Oktober 2011
Für SQL Server 2008+ können Sie auf date
umwandeln d.h. CAST(getdate() AS date)
. Oder verwenden Sie einfach date
Datentyp, also keine time
zu entfernen.
Bearbeitet, Januar 2012
Ein funktionierendes Beispiel dafür, wie flexibel dies ist:Berechnung nach gerundeter Zeit- oder Datumszahl in SQL Server erforderlich
Bearbeitet, Mai 2012
Verwenden Sie dies nicht in WHERE-Klauseln und dergleichen, ohne nachzudenken:Das Hinzufügen einer Funktion oder eines CAST zu einer Spalte macht die Indexverwendung ungültig. Siehe Nummer 2 hier Häufige Fehler bei der SQL-Programmierung
Nun, dies hat ein Beispiel für spätere Versionen des SQL Server-Optimierers, die CAST bisher korrekt verwalten, aber allgemein es wird eine schlechte Idee sein ...
Bearbeitet, September 2018, für 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)