Die einzige vernünftige Weg, dies zu tun ist, um die Zeitteil der Datetime-Werte abstreifen und die Ergebnisse vergleichen und die beste Art und Weise den Zeitanteil von einem Datetime-zu Streifen ist wie folgt:
cast(current_timestamp as date)
Früher habe ich zu verwenden, und ein Verfahren einsetzen, das wie eine der beiden folgenden Zeilen sah:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Aber jetzt, dass SQL Server die Date
Typ hat, die nicht eine Zeitkomponente hält, gibt es wenig Grund, entweder zu verwenden dieser Techniken.
Eine weitere Sache, die hier zu beachten ist, ist, dass eine Abfrage immer noch blockiert wird, wenn Sie sie für zwei datetime-Werte für jede Zeile in einer WHERE-Klausel oder einer Join-Bedingung ausführen müssen. Wenn möglich, möchten Sie dies irgendwie ausrechnen, so dass es so weit wie möglich vorberechnet wird, zum Beispiel mit einer View- oder berechneten Spalte.
Schließlich, die DATEDIFF-Funktion vergleicht die Anzahl der Grenzen überschritten. So ist der Da tiff in Tagen zwischen '2009-09-14 11:59:59'
und '2009-09-15 00:00:01'
1, obwohl nur 2 Sekunden verstrichen sind, aber der DATEDIFF in Tagen zwischen '2009-09-15 00:00:01'
und '2009-09-15 11:59:59'
ist immer noch Null, obwohl 86.398 Sekunden verstrichen sind. Beachten Sie, dass es sich um den Zeitabschnitt dort überhaupt nicht kümmert. Je nachdem, was Ihre Abfrage versucht, können Sie dies zu Ihrem Vorteil verwenden.
Seien Sie nicht mit vorzeitiger Optimierung betroffen: Schreiben Sie Ihre Abfrage mit 'DATEDIFF', dann sehen Sie, ob es ein Engpass ist oder nicht den Abfrageplan zu untersuchen. Wenn es ein Problem ist, suchen Sie eine Alternative. – Welbog
Mögliches Duplikat von [Beste Vorgehensweise zum Entfernen des Zeitanteils von datetime in SQL Server] (http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql- Server) – abatishchev