2012-04-03 6 views
0

Fehler aus dem Portugiesischen ins Englische übersetzt: "Fehler bei der Datenkonvertierung oder Datenformatkonvertierung."DB2: [Fehlercode: -802, SQL-Status: 22023] [SQL0802]

ich eine Ansicht erstellt haben:

MNUM DECIMAL 8,0         


create view db.abc as select * from x where decimal(SUBSTR(MNUM, 2,6), 6, 0) = 57092 

die mnum sieht aus wie 1.057.092 in diesem Beispiel SUBSTR (mnum, 2,6) = 057.092 und dezimal (SUBSTR (mnum, 2,6), 6, 0) sollte = 57092 sein, aber wirft diesen Fehler auf!

Dank für jede Hilfe

Antwort

1

können Sie die MOD-Funktion verwenden, um einen Teil der Zahl zu erhalten, anstatt mit dem Zeichen des Kampfes und numerische Operationen

select decimal(SUBSTR(12345678, 2,6), 6, 0) 
from sysibm.sysdummy1; 
--returns 234567 

select mod(12345678/10, 1000000) 
from sysibm.sysdummy1; 
--returns 234567 

Sie das gleiche Ergebnis zurück, aber der letzte kann nur für Zahlenoperationen angewendet werden . Und wenn Sie wat Ihre Zahl in eine Dezimalzahl mit 6 Plätze zu sichern, können Sie dies tun (wenn Ihr DB2-Version erlaubt es):

select digits(dec(mod(12345678/10, 1000000), 6)) 
from sysibm.sysdummy1; 

Nur um sicherzugehen, dass Ihr Betrieb arbeiten können, sollten Sie beurteilen, ob der MNUM-Wert ist nicht null:

+0

Danke, dass funktioniert (einige Verbesserungen)! dezimal (mod (mnum, 1000000), 6, 0) = 56029, und wie bekomme ich nun das erste Zeichen mit der Mod-Methode? –

+0

ups, ich vergesse zu erwähnen, die Zahlen können auch mit Nummer 2 beginnen: s –

+1

dezimal (SUBSTR (MNUM, 2,6), 6, 0, '.') Jetzt funktioniert das! –

0

Die SUBSTR Funktion an einer Schnur arbeitet, nicht eine Dezimalzahl.

Ich weiß nicht, welche Version von DB2 Sie verwenden, aber Sie können versuchen, diese:

DECIMAL(SUBSTR(CAST(MNUM AS CHAR(10)), 2, 6), 6, 0) 

Die „10“ 8 Zeichen für die Nummer enthält, 1 für den Dezimalpunkt und 1 für das Zeichen.

+0

wenn ich substr auf einer Dezimalzahl verwenden funktioniert es richtig, SUBSTR (MNUM, 2,6) = 057092, aber der nächste Schritt ist das Problem. Wie auch immer mit Ihrem Code ist der Fehler der gleiche: s –

+0

sogar das: DECIMAL (SUBSTR (CAST (MNUM als CHAR (10)), 2, 6), 6, 0) = DECIMAL (SUBSTR (CAST (MNUM als CHAR (10)), 2, 6), 6, 0) gibt den gleichen Fehler zurück. –

+0

Wenn Sie nur eine Zahl zum Vergleichen wünschen, versuchen Sie die INTEGER-Funktion anstelle von DECIMAL. –