DB2/iSeries SQL nettoyer CR/LF, onglets, etc
J'ai besoin de trouver et de nettoyer les sauts de ligne, retour chariot, tabulation et "SOUS"-caractères dans un ensemble de 400k+ chaîne des enregistrements, mais ce DB2 environnement est à prendre un péage sur moi.
Pensais que je pouvais faire quelque recherche et de la remplacer par la REPLACE() et CHR() fonctionne, mais il semble CHR() n'est pas disponible sur ce système (Erreur: CHR *LIBL type *N n'est pas trouvé). Travailler avec \t, \r, \n etc ne semble pas fonctionner non plus. Les caractères peuvent être au moyen de chaînes ou à la fin de l'.
DBMS = DB2
System = iSeries
Language = SQL
Encoding = Not sure, possibly EBCDIC
Tous les conseils sur ce que je peux faire avec ça?
Vous avez toujours la possibilité d'exporter les données, de processus et de le remettre. J'ai fait cela avant. J'ai utilisé Squirrel SQL pour déplacer des tables DB2 vers MySQL pour tester, avant de revenir à DB2 dans la production (Plusieurs Gigaoctets). Des problèmes avec l'utilisation de l'écureuil: l'absence de progrès indication, et d'avoir besoin de tenir la totalité de la table dans la mémoire, y compris SLQ balisage de sorte que vous aurez besoin d'augmenter vous Java limites de la mémoire. Dépend de la taille de la chaîne, mais quelques Concerts espérons-le, devrait suffire. Aussi, cela doit être fait localement ou de la bande passante sera probablement un problème.
Oh et encore une chose... à cause de la différence dans les mots clés et en citant vous pourriez avoir besoin pour appliquer un couple d'expressions régulières avant d'être importé. Vraiment rien de recherche et de remplacement dans un bon éditeur de texte ne devrait pas être en mesure de gérer (en supposant qu'il peut gérer au moins 400 ko de données!) Oh Écureuil va même écrire la définition de la table pour vous, trop.
Oh et encore une chose... à cause de la différence dans les mots clés et en citant vous pourriez avoir besoin pour appliquer un couple d'expressions régulières avant d'être importé. Vraiment rien de recherche et de remplacement dans un bon éditeur de texte ne devrait pas être en mesure de gérer (en supposant qu'il peut gérer au moins 400 ko de données!) Oh Écureuil va même écrire la définition de la table pour vous, trop.
OriginalL'auteur Simon Fredriksson | 2011-09-27
Vous devez vous connecter pour publier un commentaire.
Si vous voulez effacer les caractères spécifiques comme le retour chariot (EBCDIC x'0d') et un saut de ligne (EBCDIC x'25'), vous devriez trouver la traduit de caractère en EBCDIC utilisez ensuite le TRADUIRE() pour les remplacer avec de l'espace.
Si vous voulez juste pour supprimer les caractères non-affichables ensuite chercher quoi que ce soit sous x 40.
En fait, le saut de ligne est EBCDIC x'25'. x '0' LF en ASCII.
DOH! Merci John
Bien sur l'explication de la façon dont il fonctionne, et certaines bravo à @FroggyTX de fournir un exemple concret.
OriginalL'auteur Paul Morgan
J'ai utilisé ce SQL pour trouver x'25' et x'0D':
Et j'ai utilisé ce SQL pour les remplacer:
OriginalL'auteur David Jorgensen
Essayer de TRADUIRE ou de le REMPLACER.
La force brute de la méthode implique l'utilisation de la POSITION pour trouver le fautif est le caractère, puis SUBSTR avant et après. La concaténation de deux chaînes (moins le caractère indésirable) de ré-forme de la colonne.
Le codage des caractères est presque certainement l'un des jeux de caractères EBCDIC. Selon la façon dont le tableau obtenu chargé en premier lieu, le CR peut être x'0d "et la LF x'15', x'25'. Un moyen simple de le savoir est de se rendre à un écran vert et faire un DSPPFM contre la table. Appuyez sur la touche F10 puis F11 pour afficher la table est cru, hexadécimal (plus/moins), format.
OriginalL'auteur Buck Calabro
Pour plus de détails sur les fonctions disponibles, voir le
DB2 for i5/OS de Référence SQL.
OriginalL'auteur jamesallman
Peut-être le
TRANSLATE()
fonction sera répondre à vos besoins....où fromchars est le jeu de caractères que vous ne voulez pas, et tochars est le correspondant de caractères que vous souhaitez remplacer. Vous pouvez écrire cela dans le format hexadécimal, comme
x'nnnnnn...'
et vous aurez besoin de savoir quel jeu de caractères que vous travaillez avec.À l'aide de la
DSPFFD
commande sur votre tableau doit indiquer le CCSID de vos champs.OriginalL'auteur WarrenT
Voici un exemple de script qui remplace
X'41'
parX'40'
. Quelque chose qui crée des problèmes dans notre boutique:Si vous avez besoin de remplacer plus d'un caractère, d'étendre le "à" et "de" chaînes hexadécimales pour les valeurs que vous avez besoin dans le
TRANSLATE
fonction.OriginalL'auteur FroggyTX