Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vergleichen Sie Datumsangaben in T-SQL und ignorieren Sie dabei den Zeitteil

Der vernünftigste Weg, dies zu tun, besteht darin, den Zeitteil der datetime-Werte zu entfernen und die Ergebnisse zu vergleichen, und der beste Weg, den Zeitteil von einem datetime zu entfernen, ist wie folgt:

cast(current_timestamp as date)    

Früher habe ich einen Prozess verwendet und befürwortet, der wie eine der folgenden zwei Zeilen aussah:

cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))

Aber jetzt hat dieser SQL Server das Date Typ, der keine Zeitkomponente enthält, gibt es wenig Grund, eine dieser Techniken zu verwenden.

Eine weitere Sache, die Sie beachten sollten, ist, dass dies eine Abfrage immer noch verlangsamt, wenn Sie dies für zwei datetime-Werte für jede Zeile in einer where-Klausel oder Join-Bedingung tun müssen. Wenn möglich, möchten Sie dies irgendwie ausklammern, damit es so weit wie möglich vorberechnet wird, z. B. mithilfe einer Ansicht oder einer berechneten Spalte.

Beachten Sie schließlich, dass die DATEDIFF-Funktion die Anzahl der überschrittenen Grenzen vergleicht. Dies bedeutet den datediff in Tagen zwischen '2009-09-14 11:59:59' und '2009-09-15 00:00:01' ist 1, obwohl nur 2 Sekunden vergangen sind, aber 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. Es kümmert sich überhaupt nicht um den Zeitanteil dort, nur um die Grenzen. Je nachdem, was Ihre Abfrage zu tun versucht, können Sie dies möglicherweise zu Ihrem Vorteil nutzen.