Comment trouver les caractères spéciaux dans DB2?
J'ai une base de données DB2 base de données contenant des millions d'enregistrements.
J'ai constaté que certains char() ou varchar() champs contiennent des caractères spéciaux qui ne doit pas être stocké.
Je suppose que l'application a reçu cassé des données ou du code fait.
De toute façon, je veux trouver les enregistrements qui ont brisées de données, qui sont des caractères spéciaux (non alphabétique).
J'ai essayé de trouver la voie de requête, mais ne pouvait pas.
Quelqu'un sait la bonne requête ou de conseils?
Et qu'allez-vous faire avec ces personnages dans des dossiers qui les ont?
OriginalL'auteur nick | 2013-07-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser DB2
TRANSLATE()
fonction d'isoler les caractères non-alphanumériques. Notez que cela ne fonctionne pas dans l'Oracle mode de compatibilité, parce que dans ce cas, DB2 traiter les chaînes vides comme des valeurs nulles, comme Oracle le faire.Il fonctionne! Merci mustaccio. En outre, Mon terrain a une certaine champ vide, j'ai donc utiliser la fonction LENGTH(TRIM(TRANSLATE())). et de le TRADUIRE de l'échantillon ci-dessus a un mal orthographié. 'abcdefj' : j->g 😉 vérifier si quelqu'un utiliser ce code. une bonne journée!
OriginalL'auteur mustaccio
Je sais que c'est un vieux fil...mais après avoir lu une tonne...c'était mon problème exact et voici la solution que j'ai développée pour déterminer le problème des lignes...de sorte que je pouvais entrer et corriger manuellement. Bon à savoir: le problème pour moi se passe parce que les utilisateurs sont des copier/coller à partir de Word dans mon application. Oui, je sais que nous devons corriger cela avant l'enregistrement...mais nous avons de plus gros poissons à frire.
Quelques Remarques:
10 est probablement un saut de ligne. Il a un retour de chariot (qui serait de 13) dans la chaîne de caractères à rechercher. Cette réponse totalement m'a aidé.
OriginalL'auteur user4342423
Vous pouvez utiliser une expression régulière dans le but de récupérer les caractères non valides. Cependant, ce processus est très cher, parce que vous devez lire toutes les données, et de les traiter ensuite.
Afin d'utiliser des expressions régulières dans DB2, vous devez vous adapter à l'environnement, car cette fonctionnalité n'est pas disponible pour SQL dans l'installation. Vous avez ces trois options:
Une fois que vous avez défini une expression régulière pour ignorer les caractères valides (quelque chose comme
/[^a-zA-Z0-9]/
), alors vous pourriez exécutée dans la base de données. N'oubliez pas de récupérer d'autres de la colonne où vous pouvez détecter la ligne (par exemple une colonne ID), puis installez les mises à jour ou les supprimer à tailler les caractères non valides.Si vous ne savez pas comment utiliser l'expression régulière, ici vous avez une bonne source d'information: http://www.regular-expressions.info/ Spécialement http://www.regular-expressions.info/charclass.html
Il y a une question relative au sujet de l'expression régulière: Les Expressions régulières dans DB2 SQL
OriginalL'auteur AngocA
Si par des caractères spéciaux vous dire les caractères non-imprimables vous pouvez utiliser celui-ci:
Vous verrez probablement que votre impair de caractères
HEX()
est < 40.De toute façon si vous connaissez la
HEX()
de votre bizarre/caractères spéciaux vous pouvez utiliser cette approche et les remplacer par un espace ou ce que vous voulez de façon permanente:Pourriez-vous me dire pourquoi cela est censé fonctionner, et dans lequel DB2 version? L'affichage de la x'...' partie montre
a bunch of squares and rectangles followed by !"#$%&'()*+,-./0123456789:;<=>
que je ne pouvais pas copier. Et comme prévu, lorsquemyfields
contient des alphabets, il n'était pas en mesure de traduire. Donc, j'imagine que l'hexagone est manquant beaucoup deprintable
personnages? Impossible, si nous devons trouver tous les caractères imprimables de mettre dans cette citation.OriginalL'auteur gugol
Cette requête a fonctionné pour moi dans le passé sur DB2 iSeries.
Problème est que vous devez être certain de la valeur hexadécimale vous êtes à la recherche dans la chaîne. J'ai eu une situation similaire, où la j'étais sûr que le code hexadécimal du caractère x'3F, mais quand je l'ai sous-chaîne de la non-visible de caractère, il était en fait x'22. Vous pourriez le personnage qui est en vous donnant la question et voir ce que c'est la valeur des autres.
OriginalL'auteur jwbradley
Vous pouvez utiliser ci-dessous SQL qui ne fonctionne correctement.
select col 1 from table where col1 like '%'|| chr(10) || '%';
OriginalL'auteur Roopkumar Akubathini