web-dev-qa-db-fra.com

Comment supprimer les espaces de début et de fin dans un champ MySQL?

J'ai un tableau avec deux champs (pays et codes ISO):

Table1

   field1 - e.g. 'Afghanistan' (without quotes)
   field2 - e.g. 'AF'(without quotes)

Dans certaines lignes, le deuxième champ comporte des espaces au début et/ou à la 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)

Existe-t-il un moyen (en SQL) de parcourir la table et de rechercher/remplacer les espaces blancs dans field2?

119
KB.

Vous recherchez TRIM .

UPDATE FOO set FIELD2 = TRIM(FIELD2);
247
cwallenpoole

Une réponse générale que j'ai composée de vos réponses et d'autres liens et cela a fonctionné pour moi et je l'ai écrit dans un commentaire est la suivante:

 UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));

etc.

Parce que trim () ne supprime pas tous les espaces blancs, il est donc préférable de remplacer tous les espaces blancs souhaités et de le réduire.

J'espère que je pourrais vous aider à partager ma réponse :)

34
Chris Sim

Veuillez comprendre le cas d'utilisation avant d'utiliser cette solution:

trim ne fonctionne pas en faisant la requête select

Cela marche

select replace(name , ' ','') from test;

Bien que cela ne soit pas

select trim(name) from test;
25
amitchhajer

Pour être clair, TRIM par défaut ne supprime que les espaces (pas tous les espaces). Voici la doc: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

16
mulya

Il semble qu'aucune des réponses actuelles ne supprime 100% des espaces du début et de la fin d'une chaîne.

Comme mentionné dans d'autres publications, la valeur par défaut TRIM ne supprime que les espaces - pas les tabulations, les sauts de formulaire, etc. Une combinaison de TRIMs spécifiant d'autres caractères d'espacement peut fournir une amélioration limitée, par exemple. TRIM(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 qu’un seul caractère peut être spécifié pour un TRIM particulier et que ces caractères ne sont supprimés qu’au début et à la fin. Donc, si la chaîne à couper est quelque chose comme \t \t \t \t (c’est-à-dire des espaces de remplacement et des tabulations), il faudra plus de TRIM - et dans le cas général cela pourrait durer indéfiniment.

Pour une solution légère, il devrait être possible d'écrire une simple fonction définie par l'utilisateur (UDF) pour effectuer le travail en parcourant en boucle les caractères au début et à la fin d'une chaîne. Mais je ne vais pas faire cela ... car j'ai déjà écrit un poids un peu plus lourd substitut d'expression régulière qui peut également faire le travail - et peut s'avérer utile pour d'autres raisons, comme décrit dans cet article de blog .

Démo

démo en ligne Rextester . En particulier, la dernière ligne indique l'échec des autres méthodes, mais celui de la méthode d'expression régulière.

SQL (code de fonction omis par souci de brièveté)

SELECT reg_replace(
         reg_replace(txt,
                     '^[[:space:]]+',
                     '',
                     TRUE,
                     1,
                     0),
         '[[:space:]]+$',
         '',
         TRUE,
         1,
         0) AS `trimmed txt`
FROM tbl;
9
Steve Chambers

Cette déclaration supprimera et mettra à jour le contenu du champ de votre base de données.

Pour supprimer les espaces dans le côté gauche de la valeur du champ

PDATE table SET champ1 = LTRIM (champ1);

ex. UPDATE membre SET prénom = LTRIM (prénom);

Pour supprimer les espaces dans le côté droit de la valeur du champ

table UPDATE SETfield1 = RTRIM (field1);

ex. UPDATE membre SET prénom = RTRIM (prénom);

3
luxknight_007

J'avais besoin de rogner les valeurs dans une colonne de clé primaire comportant le nom et le prénom. Je ne voulais donc pas rogner tous les espaces, cela supprimerait l'espace entre le prénom et le nom de famille, ce que je devais conserver. Ce qui a fonctionné pour moi était ...

UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);

ou

UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);

ou

UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);

Notez que la première instance de FIELD est entre guillemets simples mais que la seconde ne l’est pas du tout. Je devais le faire de cette façon ou il me donnait une erreur de syntaxe disant que c'était une clé primaire dupliquée quand j'avais les deux guillemets.

1
MistyDawn

Si vous devez utiliser trim dans une requête select, vous pouvez également utiliser des expressions régulières.

SELECT * FROM table_name WHERE field RLIKE ' * query-string *'

retourne des lignes avec un champ comme 'query-string'

1
TheSameSon

vous pouvez utiliser ltrim ou rtrim pour nettoyer les espaces blancs à droite ou à gauche ou pour une chaîne.

0
Tomer