Maison  >  Article  >  tutoriels informatiques  >  Quelle est la solution au problème des espaces dans les données de type CHAR dans Oracle ?

Quelle est la solution au problème des espaces dans les données de type CHAR dans Oracle ?

WBOY
WBOYavant
2024-01-15 18:21:16942parcourir

Quelle est la solution au problème des espaces dans les données de type CHAR dans Oracle ?

Existe-t-il un moyen de supprimer la valeur nulle dans les données de type CHAR dans Oracle

Vous pouvez utiliser un script pour convertir tous les champs de type CHAR en type VARCHAR2 et couper les espaces dans la chaîne, comme suit :

déclarer

commencer

pour c in (sélectionnez *

de user_tab_columns t1

où t1.DATA_TYPE = 'CHAR'

) boucle

exécuter immédiatement 'altérer la table' || c.table_name || 'add g_w_' || c.column_name || 'varchar2(' || c.char_length || ')';

exécuter la 'mise à jour' immédiate || c.table_name || 'set g_w_' || c.column_name ||

exécuter la 'mise à jour' immédiate || c.table_name || 'set' || c.column_name ||

exécuter immédiatement 'altérer la table' || c.table_name || 'modifier' || c.column_name || 'varchar2(' || c.char_length || ')';

exécuter la 'mise à jour' immédiate || c.table_name || 'set ' || c.column_name || ' = trim(g_w_' || c.column_name || ')';

exécuter immédiatement 'altérer la table' || c.table_name || 'drop column g_w_' ||

fin de boucle ;

fin;

Comment supprimer les caractères de type espace dans la structure des tables de base de données Oracle

1. Tout d'abord, supprimez les espaces avant la comparaison (par exemple, supprimez tous les espaces dans les noms) :

Mettre à jour table_name set xm=replace(xm, ' ') ;

Si vous souhaitez trouver quels enregistrements contiennent « », vous pouvez utiliser les instructions associées pour effectuer la recherche.

Ensuite, vous pouvez comparer.

2. Cependant, nous pouvons constater qu'il y a des caractères similaires à des espaces au milieu ou à la fin de certains noms qui n'ont pas été supprimés, mais ce ne sont évidemment pas des espaces ordinaires, nous soupçonnons donc que Tab Jian est en faute. J'ai donc suivi la méthode de suppression de la touche TAB mentionnée sur Internet, et utilisé chr(9) pour remplacer la barre d'espace (la valeur ASCII de la touche TAB est 9). Prenez d'abord un enregistrement avec des caractères de type espace pour expérimenter :

SELECT replace(xm, chr(9) ) from table_name où ;

L'utilisation de cette méthode supprimera certains espaces de touches de tabulation réels, puis adoptera la méthode de mise à jour par lots.

3. Mais la situation que j'ai rencontrée n'a pas été aussi chanceuse et je n'ai pas réussi à retirer la clé en forme d'espace. Comment faire? J'ai décidé d'essayer d'abord d'obtenir la valeur du code ASCII de cette clé d'espace, puis d'utiliser la méthode chr (valeur du code ASCII) pour la traiter.

①.Obtenez la longueur () de la chaîne entière contenant la clé de type espace, déterminant ainsi la position de départ de la clé de type espace dans la chaîne et la longueur de la clé de type espace.

②. La valeur du code ASCII de la clé de type espace : ascii(substr(xm,n,m)); n est la position de départ de la clé de type espace ;

③.SELECT replace(xm, chr (valeur du code ASCII obtenue à l'étape ②)) from table_name où ;

Problème résolu. Mais j'ai trouvé que la valeur du code ASCII obtenue à l'étape 2 ci-dessus est 41377. Cela devrait être la valeur du code ASCII d'un caractère chinois, et cela ressemble à un espace. Je me suis donc demandé s'il s'agissait de la touche espace et de la touche TAB en chinois. mode? Après l'avoir essayé, j'ai découvert que ce n'était pas le cas. Je me demande aussi, est-ce la différence entre pleine largeur et demi-largeur ? Parce que nous saisissons généralement les caractères à mi-chasse. J'ai suivi la première étape "1. Supprimez d'abord les espaces avant de comparer..." et j'ai essayé de saisir les espaces en pleine largeur et de rechercher. Le résultat a été une surprise. Il s'est avéré que tous les espaces n'étaient pas supprimés. étaient les espaces saisis en pleine largeur. La connexion parallèle a confirmé que l'espace saisi en mode pleine largeur avait une valeur de code ASCII de 41377.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer