SQL Server: datediff-Funktion führte zu einem überlauf
Was hat dieser Fehler zu bedeuten und wie kann ich Sie vermeiden?
Die datediff-Funktion führte zu einem überlauf. Die Anzahl der dateparts zwischen zwei Datum/Uhrzeit-Instanzen ist zu groß. Versuchen datediff mit einem weniger präzisen datepart.
Ich bin nicht mit der datediff-Funktion. Ich mache diese Abfrage wo Timestamp ein datetime-Typ:
SELECT TOP 10 * from vSomeView
WHERE TimestampUTC >= '2009-08-13 22:17:00'
Was könnte ich falsch gemacht?
Ich bin mit SQL Server 2008.
- was passiert in der Ansicht?
- Basierend auf den Namen "vSomeView", es klingt wie Sie der Abfrage anzeigen. Wenn ja, was ist die view-definition? Vielleicht ist es mit datepart?
- Tut vSomeView verwenden der DateDiff?
- Ich denke, timestamp ist ein reserviertes Wort ist.. aber es sieht aus wie Sie versuchen, es zu benutzen, wie den Namen einer Spalte aus? Geben Sie entweder den Namen der Tabelle, die erste, und/oder wählen Sie einen anderen Spaltennamen.
- Der Blick ist zu tun, tun einen join zwischen zwei Tabellen und die Multiplikation einer anderen Spalte (nicht in dieser Abfrage) durch einen bestimmten Betrag. Die TimestampUTC Spalte nicht geändert und DateDiff wird nicht verwendet.
- Keine Sorge... sind Sie sicher, dass die multplication nicht versehentlich verursacht den überlauf?
- Sind die Basis-Tabellen mit berechneten Spalten? Sind Sie in der Lage, zu vernehmen die Tabellen erfolgreich, ohne den Blick? Oder die Ansicht ohne die where-Klausel?
- Poste bitte die view-definition. Auch, überprüfen Sie bitte die referenzierten Objekte in den Blick, auf der off-chance, dass Sie auch die Ansichten oder die vielleicht sogar funktioniert.
- Überprüfen Sie auch für Trigger auf der Basis von Tabellen. Manchmal auch skurrile Fehler zurückgegeben, da gibt es einen bug in einem trigger.
- Gute Tipps für die Behandlung dieses.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQL Server-vielleicht tut ein DATEDIFF intern für den Vergleich und wenn die beiden Termine sind so viel mehr als 68 Jahre auseinander (und der interne DATEDIFF ist in Sekunden), DATEDIFF können Fehler wie die Ausgabe von DATEDIFF ist ein INT.
Hab ich stieß auf dieses vor (mit DATEDIFF direkt) gelöst und durch Gießen DATETIME ist an Dezimalstellen wie folgt:
Ich hatte das gleiche Problem, weil einer der Datensätze in meine Tabelle ein default-Wert für einen DatumUhrzeit-Feld 1900-01-01 00:00:00.000.
DATEDIFF in der where-Klausel ausgewertet werden, die für alle Datensätze in der Tabelle und überlauf an der LastCheckIn mit Wert 1900-01-01 00:00:00.000
Ich löste es, indem erste Bewertung DATEDIFF für eine Differenz in JAHREN < 1
Dies ist die endgültige Abfrage:
Danke Euch allen für die Zeiger!
Machten Sie mich überprüfen Sie die vSomeView und es stellt sich heraus, dass die vSomeView war dabei eine Verknüpfung zwischen einer Ansicht und einige andere Tabellen. Diese Sicht wurde dabei ein datediff konvertieren einige datetime in eine posix-Stil-Zeitstempel (Sekunden seit Epoche). Einmal habe ich es entfernt, die Abfrage läuft wunderbar.
SQL Server 2016 Hinzugefügt
DATEDIFF_BIG()
gibtbigint
.