DB2/iSeries SQL bereinigen CR/LF, tabs etc
Muss ich finden und bereinigen Zeilenumbrüche, Zeilenschaltungen, Tabulatoren und "SUB"-Zeichen in einer Menge von 400k+ string Aufzeichnungen, aber diese DB2-Umgebung ist ein Tribut an mich.
Dachte, ich könnte tun, etwas suchen und ersetzen mit der ERSETZEN() und CHR () - Funktionen, aber es scheint, CHR() ist nicht verfügbar auf diesem system (Fehler: CHR in *LIBL Art *N nicht gefunden). Arbeiten mit \t, \r, \n, usw. scheint nicht zu funktionieren. Die chars werden in der Mitte der Saiten oder am Ende von Ihnen.
DBMS = DB2
System = iSeries
Language = SQL
Encoding = Not sure, possibly EBCDIC
Irgendwelche Tipps, was ich tun kann, mit diesem?
Man konnte immer die Daten exportieren, zu verarbeiten und setzen Sie Sie zurück. Ich habe dies getan, bevor. Ich habe Squirrel SQL zu bewegen, DB2-Tabellen, um MySQL zu testen, bevor er zurück nach DB2 in der Produktion (Viele GB). Probleme mit Eichhörnchen gehören: fehlende Fortschrittsanzeige, und benötigen, um zu halten die ganze Tabelle im Speicher einschließlich der SLQ-markup, so dass Sie benötigen, um Ihre Java-Speicher-Grenzen. Hängt von string-Größe, aber ein paar Gigs hoffentlich würde ausreichen. Auch diese müssen vor Ort durchgeführt werden oder die Bandbreite wird wahrscheinlich ein Problem sein.
Ach ja und noch was... weil der Unterschied in Stichworten und unter Angabe müssen Sie möglicherweise wenden Sie ein paar regulären Ausdrücken, bevor Sie importiert werden können. Wirklich nichts suchen und ersetzen in einem anständigen text-editor sollten nicht in der Lage zu handhaben (vorausgesetzt, es kann mit mindestens 400 Kb records!) Oh Eichhörnchen sogar schreiben die definition der Tabelle für Sie, zu.
Ach ja und noch was... weil der Unterschied in Stichworten und unter Angabe müssen Sie möglicherweise wenden Sie ein paar regulären Ausdrücken, bevor Sie importiert werden können. Wirklich nichts suchen und ersetzen in einem anständigen text-editor sollten nicht in der Lage zu handhaben (vorausgesetzt, es kann mit mindestens 400 Kb records!) Oh Eichhörnchen sogar schreiben die definition der Tabelle für Sie, zu.
InformationsquelleAutor Simon Fredriksson | 2011-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Aufräumen wollen, bestimmte Zeichen wie Wagenrücklauf (EBCDIC x'0d') und line feed (EBCDIC x'25') sollten Sie finden die übersetzt Zeichen in EBCDIC dann der TRANSLATE () - Funktion ersetzen Sie Sie durch Leerzeichen.
Wenn Sie nur wollen, zu entfernen undisplayable Zeichen dann Aussehen, für die alles unter x'40'.
Eigentlich ist der line feed wird EBCDIC x'25'. x'0A' ist LF in ASCII.
DOH! Danke, John
Gut auf die Erklärung, wie es funktioniert, und einige kudos an @FroggyTX für die Bereitstellung eines praktischen Beispiels.
InformationsquelleAutor Paul Morgan
Habe ich dieses SQL zu finden x'25' und x'0D':
Und habe das SQL um Sie zu ersetzen:
InformationsquelleAutor David Jorgensen
Versuchen Sie zu ÜBERSETZEN oder zu ERSETZEN.
Brute-force-Methode umfasst die Verwendung POSITION zu finden, die fehlgeleiteten Charakter, dann SUBSTR vor und nach es. CONCAT, die zwei Teilfolgen (weniger der unerwünschten Zeichen) zu re-form der Spalte.
Die Zeichenkodierung ist sicherlich einer der EBCDIC-Zeichensätze. Je nachdem, wie die Tabelle geladen wurden, in den ersten Platz, der ZE kann sein x'0d' und die LF-x'15' x'25'. Eine einfache Möglichkeit um herauszufinden, ist zu bekommen, um einen green-screen und eine DSPPFM gegen den Tisch. Drücken Sie die Taste F10 dann die Taste F11 zum anzeigen der Tabelle ist roh, hexadezimal (über/unter) - format.
InformationsquelleAutor Buck Calabro
Weitere Informationen zu den verfügbaren Funktionen finden Sie in der
DB2 für i5/OS-SQL-Referenz.
InformationsquelleAutor jamesallman
Vielleicht die
TRANSLATE()
Funktion wird Ihren Bedürfnissen gerecht zu werden....wo fromchars ist der Satz von Zeichen, die Sie nicht wollen, und tochars ist das entsprechende Zeichen, die Sie wollen, dass Sie ersetzt. Können Sie haben, dies zu schreiben in hex format, wie
x'nnnnnn...'
und Sie müssen wissen, welcher Zeichensatz mit dem Sie arbeiten.Mit der
DSPFFD
Befehl auf Ihrem Tisch, sollten die CCSID Ihrer Felder.InformationsquelleAutor WarrenT
Hier ist ein Beispiel-Skript, das ersetzt
X'41'
durchX'40'
. Etwas, das erstellen von Themen in unserem shop:Wenn Sie ersetzen müssen, die mehr als ein Zeichen, das die Verlängerung der "an" und "aus" hexadezimale Zeichenfolgen der Werte müssen Sie in die
TRANSLATE
Funktion.InformationsquelleAutor FroggyTX