2016-04-08 11 views
0

Ich versuche 13 Jahre zu einem Geburtsdatum hinzuzufügen, das als datetime2 mit der folgenden Syntax gespeichert wird und (dateadd (yy, 13, isNull (Besetzung (p.birthDTS als datetime), Besetzung ('1/1/1950 'als Datetime)))> = @ svcStart)datetime2 Überlauffehler

und ich bekomme die Das Hinzufügen eines Wertes zu einer' datetime 'Spalte verursachte einen Überlauf.

I max für die gesuchte (p.birthDTS), und es ergab 1988.10.17 00: 00: 00,0000000

erhielt ich die für @svcStart als 2015.04.08 13: 10: 49,193

Ich bin ein bisschen flummoxed. Irgendeine Hilfe?

jb

+0

Was ist der * 'MIN' * -Wert von' birthDTS'? –

Antwort

1

Wenn Sie mit Werten arbeiten, sind DATETIME2 Sie wollen können versuchen, Ihre Werte zu DATETIME2 Gießen im Gegensatz zu DATETIME:

DATEADD(yy,13,ISNULL(CAST(p.birthDTS AS DATETIME2),CAST('1/1/1950' AS DATETIME2))) 

Sie keine ungültigen Daten Unter der Annahme oder Ein ähnliches Problem und die Beispieldaten, die Sie angegeben haben, sind korrekt (dh die größte ist 1988-10-17), was korrekt zu sein scheint, wie seen here:

enter image description here

Ich würde sicherstellen, dass Sie alle Ihre Datentypen doppelt überprüfen, um sicherzustellen, dass sie wie erwartet definiert sind und eine erneute Abfrage durch Ihre Daten in Betracht ziehen, um Randfälle (z. größte und kleinste Werte, mögliche Nullen usw.).

0

Dieser Fehler tritt möglicherweise auf, wenn der Wert in Ihren Datensätzen im Datumsfeld kein gültiges Datum ist oder wenn Sie diesem Wert einige Monate oder ein Datum hinzufügen und dessen Ausgabe den Datumsbereich überschreitet.

+0

Sie hatten Recht. Das maximale Geburtsdatum in der Tabelle ist offensichtlich ein Fehler bei 9999-01-01 00: 00: 00.0000000, aber ich muss prüfen, ob der Fehler ausgeschlossen werden kann. Vielen Dank für Ihren Kommentar. – user1795131

+0

@ user1795131 Also, als Sie sagten, "Ich suchte nach dem Max (p.birthDTS) und es kehrte 1988-10-17 00: 00: 00.0000000" ..? –