Comment faire pour supprimer attaque et de fuite des espaces dans un champ MySQL?
J'ai une table avec deux champs (pays et des codes ISO):
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. 'AF'(without quotes)
En quelques lignes le deuxième champ a des espaces blancs au début et/ou fin, ce qui affecte les requêtes.
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. ' AF' (without quotes but with that space in front)
Est-il un moyen (en SQL) pour passer à travers la table et trouver/remplacer les espaces dans champ2?
- Ajouter ma réponse en commentaire pour le rendre plus visible: Juste pour être clair, TRIM par défaut seulement supprimer les espaces (pas tous les espacements). Voici la doc: dev.mysql.com/doc/refman/5.0/en/...
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour GARNITURE.
Une réponse d'ordre général que j'ai composé à partir de vos réponses et d'autres liens et il a travaillé pour moi et je l'ai écrit dans un commentaire est:
etc.
Car trim() permet de ne pas supprimer tous les espaces en blanc, il est donc préférable de remplacer tous les espaces en blanc, u veux et de le découper.
Espère que je pourrais vous aider avec le partage de ma réponse 🙂
S'il vous plaît comprendre le cas d'utilisation avant d'utiliser cette solution:
trim ne fonctionne pas en faisant une requête select
Cela fonctionne
Alors que ce n'est pas
select trim(name) name from test;
TRIM()
fonctionne très bien pour moi, dans unSELECT
déclaration, je suis vraiment curieux de savoir pourquoi cette réponse a beaucoup de upvotes. Êtes-vous à l'aide de mysql? Quelle version?Juste pour être clair, TRIM par défaut seulement supprimer les espaces (pas tous les espacements). Voici la doc: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
Il semble aucun des actuels réponses vous vraiment supprimer 100% des espaces de début et de fin de chaîne.
Comme mentionné dans d'autres commentaires, la valeur par défaut
TRIM
seulement supprime les espaces - pas d'onglets, formfeeds etc. Une combinaison deTRIM
s spécifiant d'autres espaces peuvent fournir une amélioration limitée par exempleTRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt)))))
. Mais le problème avec cette approche est que d'un seul caractère peut être spécifiée pour uneTRIM
et ces personnages ne sont supprimés qu'à partir du début et de la fin. Donc, si la chaîne est découpée est quelque chose comme\t \t \t \t
(c'est à dire alterner les espaces et les caractères de tabulation), plusTRIM
s seraient nécessaires - et dans le cas général cela pourrait continuer indéfiniment.Pour une solution légère, il devrait être possible d'écrire une simple Fonction Définie par l'Utilisateur (UDF) de faire le travail en parcourant les caractères de début et de fin de chaîne. Mais je ne vais pas le faire... comme je l'ai déjà écrit un peu plus lourd expression régulière de la poudre de qui peuvent aussi faire le travail - et peut s'avérer utile pour d'autres raisons, comme décrit dans ce blog.
Démo
Rextester démo en ligne. En particulier, la dernière ligne indique les autres méthodes de défaut, mais la méthode d'expression régulière réussir.
SQL (code de fonction omis par souci de concision)
Cette déclaration sera supprimer et mettre à jour le contenu du champ de votre base de données
Pour supprimer des espaces dans le côté gauche de la valeur du champ
UPDATE table SET champ1 = LTRIM(champ1);
ex. Mise à JOUR de l'ENSEMBLE des membres firstName = LTRIM(prenom);
Pour supprimer les espaces à droite de la valeur du champ
Mettre à JOUR le tableau SETfield1 = RTRIM(champ1);
ex. Mise à JOUR de l'ENSEMBLE des membres firstName = RTRIM(prenom);
J'avais besoin de couper les valeurs dans une colonne de clé primaire qui avaient des noms et des prénoms, donc je n'ai pas envie de couper tous les espaces blancs car cela permettrait de supprimer l'espace entre le premier et le dernier nom, que je devais garder. Ce qui a fonctionné pour moi a été...
ou
ou
Noter que la première instance de CHAMP est entre guillemets simples, mais la deuxième n'est pas entre guillemets à tous. J'ai eu à le faire de cette façon, ou il m'a donné une erreur de syntaxe en disant que c'était un double de la clé primaire quand j'ai eu les deux entre guillemets.
Si vous avez besoin d'utiliser la garniture dans la requête select, vous pouvez également utiliser des expressions régulières
retourner les lignes de champ comme " la chaîne de la requête '
vous pouvez utiliser ltrim ou rtrim pour nettoyer les espaces pour la droite ou la gauche, ou une chaîne.
Je sais que je suis déjà accepté, mais pour celles qui comme moi de chercher "supprimer TOUS les espaces" (et pas seulement au début et endingof la chaîne):
MODIFIER 2019/6/20 : Ouais, c'est pas bien. La fonction retourne la partie de la chaîne depuis "lorsque le caractère de l'espace s'est produite pour la première fois".
Donc, je suppose que le fait de dire ce retirer le premier et trailling des espaces et renvoie le premier mot :