Welche Methode bietet die beste Leistung beim Entfernen des Zeitanteils aus einem Datetime-Feld in SQL Server?
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
oder
b) select cast(convert(char(11), getdate(), 113) as datetime)
Bei der zweiten Methode werden zwar ein paar Bytes mehr gesendet, aber das ist vielleicht nicht so wichtig wie die Geschwindigkeit der Konvertierung.
Beide scheinen auch sehr schnell zu sein, aber es könnte einen Unterschied in der Geschwindigkeit geben, wenn es um Hunderttausende oder mehr Zeilen geht?
Ist es auch möglich, dass es noch bessere Methoden gibt, um den Zeitanteil einer Datumsangabe in SQL loszuwerden?
1 Stimmen
Ich habe dies mit einer Million Datensätzen in einer meiner Produktionstabellen ausprobiert und konnte in beiden Fällen keine genauen Angaben zur Leistung machen. Beide Methoden ergaben jedoch genau dieselbe Datenmenge.
0 Stimmen
Die Manipulation von Zeichenketten ist sehr viel CPU-intensiver. DATEADD und DATEDIFF sind so konzipiert, dass sie die von SQL Server verwendete Speicherdarstellung optimal nutzen.
9 Stimmen
Bei 18.000.000 Zeilen habe ich Folgendes gefunden (SQL Server 2008): Methode b ist etwa 24% langsamer als Methode a. CAST(FLOOR(CAST(getdate() AS FLOAT))) AS DATETIME) ist 3,5 % langsamer als Methode a. Methode a scheint in Bezug auf die Leistung ein Gewinner zu sein. Vielen Dank an alle für die tollen Antworten.
53 Stimmen
Warum zum Teufel hat SQL keine eingebaute Funktion für diese Aufgabe?!
12 Stimmen
Der neue Datentyp DATE von SQL 2008 wird dies übernehmen.
0 Stimmen
Ich habe versucht, CASTing die datetime zu einem Datum und es war sogar langsamer als Methode b. Wenn Sie nicht brauchen, um den Zeitteil zu speichern, dann würde dieser Datentyp sehr gut funktionieren.
3 Stimmen
Mögliche Duplikate von Die effizienteste Art und Weise in SQL Server zu erhalten Datum von Datum + Zeit?
0 Stimmen
Duplikat von Wie entfernt man den Zeitanteil eines Datetime-Wertes (SQL Server)?