1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Konvertierung führte zum Überlauf einer int-Spalte

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von IchHH, 30 Oktober 2018.

  1. IchHH

    IchHH Datenbank-Guru

    Hallo ich versuche mittels

    sum(RIGHT([BKV_1].[BKV_KT],18)/9) as Ergebniss

    eine Zahl zu errechnen und bekomme dann den Fehler, wie er aus der Überschrift zu entnehmen ist.

    Was aber machen ich falsch? Bzw. wie schaffe stelle ich das ab?
     
  2. ukulele

    ukulele Datenbank-Guru

    Deine Spalte [BKV_1].[BKV_KT] wird eine Zeichenkette sein und bei einem betroffenen Datensatz wird die Konvertierung in eine Zahl scheitern, vermutlich weil ein für Zahlen ungültiges Zeichen in der Zeichenkette steht.

    Du kannst diese Datensätze entweder im WHERE-Teil komplett filtern oder per CASE vorher prüfen ob es sich um einen numerischen Wert handelt.
    Code:
    sum(CASE WHEN isnumeric(RIGHT([BKV_1].[BKV_KT],18)) = 1 THEN RIGHT([BKV_1].[BKV_KT],18)/9 ELSE 0 END) as Ergebniss
     
  3. IchHH

    IchHH Datenbank-Guru

    Hallo Ukulele,

    guter Ansatz, leider hat der nicht funktioniert. Die Fehlermeldung ist die selbe.
    Die Zahlen die dort rauskommen beim right sollten aber alle numerischer Art sein. Deshalb verwundert mich die Fehlermeldung sehr.

    Interessanterweise sagt das System das es sich um ein Varchar handelt, selbst dann wenn ich es in einer anderen Tabelle importieren lasse.
     
  4. IchHH

    IchHH Datenbank-Guru

    Ich haben nun mal alles rausgefilter was nicht "isnumeric = 1" ist und die Fehlermeldung bleibt noch immer die selbe.
     
  5. ukulele

    ukulele Datenbank-Guru

    Wenn du deine Zeichenkette durch 9 teilst versucht SQL die Zeichenkette in eine Zahl zu konvertieren, ich glaube Integer. Vielleicht ist deine bis zu 18-Stellen lange Zahl irgendwo zu groß? Du kannst ja mal deinen Select vereinfachen auf z.B. CONVERT(BIGINT,RIGHT([BKV_1].[BKV_KT],18)), kommt da die selbe Fehlermeldung? Bei Nachkommastellen muss eventuell auch FLOAT oder NUMERIC verwendet werden, du solltest auf jeden Fall explizit in das gewünschte Format konvertieren. Wenn das dann klappt kannst du teilen und summieren.
     
  6. IchHH

    IchHH Datenbank-Guru

    Ich habe eine Konvertierung in Numeric vorgenommen und anschließend die Daten mit ISNUMERIC geprüft. Nirgends ist eine 0 enthalten. Dennoch die selbe Fehlermeldung. So langsam weiß ich auch nicht mehr weiter.
     
  7. ukulele

    ukulele Datenbank-Guru

    Hm da hab ich auch grade keine Idee mehr. Sind Nachkommastellen enthalten? Hier gilt meist das US Format bei der Konvertierung mit . als Dezimalkennzeichen und , wird als Tausender-Trennzeichen interpretiert.
     
  8. i2stiller

    i2stiller Benutzer

    Zum Eingrenzen des Fehlers vielleicht mal die Zeile suchen, die Ärger bereitet.
    Du hast doch bestimmt auf der Tabelle irgend einen Schlüssel.
    Dann baust die Abfrage so um, dass du zuerst nur nach Sätzen in der unteren Hälfte der Tabelle suchst.
    Also zum Bleistift
    SELECT xyz WHERE KEYFIELD<='M' ; Falls der Schlüssel z.B. Strings wären
    Trifft der Fehler immer noch auf, dann splittest du den Bereich wieder
    SELECT xyz WHERE KEYFIELD<='MM'
    Sonst
    SELECT xyz WHERE KEYFIELD>'M' AND <='ZM'
    Das wiederholst du solange, bis der Satz eindeutig identifiziert ist.
    ist unter Umständen ein bisschen Arbeit, aber am Ende hat man den Kandidaten

    Eine andere Möglichkeit ist, den SQL-Profile anzuwerfen und alle Zugriffe zu protokollieren.
    Der letzte Zugriff auf die Datenbank sollte dann den Problem-Satz enthalten

    Gruß Ingo
     
Die Seite wird geladen...
Ähnliche Themen - Konvertierung führte Überlauf
  1. g0drealm
    Antworten:
    2
    Aufrufe:
    648

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden