J'ai une table 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 contient 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 trouver / remplacer l'espace blanc dans field2?
Réponses:
Vous recherchez TRIM .
la source
Une réponse générale que j'ai composée à partir de vos réponses et d'autres liens et cela a fonctionné pour moi et je l'ai écrite dans un commentaire est:
etc.
Parce que trim () ne supprime pas tous les espaces blancs, il est donc préférable de remplacer tous les espaces blancs que vous voulez et de les couper.
J'espère que je pourrais vous aider à partager ma réponse :)
la source
Veuillez comprendre le cas d'utilisation avant d'utiliser cette solution:
le découpage ne fonctionne pas lors de l'exécution de la requête de sélection
Cela marche
Bien que ce ne soit pas
la source
TRIM()
fonctionne bien pour moi dans uneSELECT
déclaration, je suis vraiment curieux de savoir pourquoi cette réponse a reçu autant de votes positifs. Utilisez-vous mysql? Quelle version?SELECT CONCAT('"', TRIM(" hello world "), '"') AS `trimmed value` FROM DUAL
donne la sortie souhaitée"hello world"
. Alors que la variante de remplacement supprime dangereusement l'espace comme séparateur de mots:SELECT CONCAT('"', REPLACE(" hello world ", ' ', '')) AS `replaced value` FROM DUAL
donne la sortie indésirable"helloworld"
Pour être clair, TRIM par défaut ne supprime que les espaces (pas tous les espaces). Voici le doc: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
la source
Il semble qu'aucune des réponses actuelles ne supprime réellement 100% des espaces du début et de la fin d'une chaîne.
Comme mentionné dans d'autres articles, la valeur par défaut
TRIM
ne supprime que les espaces - pas les tabulations, les sauts de formulaire, etc. Une combinaison deTRIM
s spécifiant d'autres caractères d' espacement peut 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 qu'un seul caractère peut être spécifié pour un particulierTRIM
et que ces caractères ne sont supprimés que du début et de la fin. Donc, si la chaîne à couper est quelque chose comme\t \t \t \t
(c'est-à-dire des espaces et des tabulations alternés), plus deTRIM
s seraient nécessaires - 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 faire le travail en boucle sur les caractères au début et à la fin d'une chaîne. Mais je ne vais pas le faire ... car j'ai déjà écrit un remplaçant d'expressions régulières plutôt plus lourd qui peut également faire le travail - et peut être utile pour d'autres raisons, comme décrit dans ce billet de blog .
Démo
Démo en ligne de Rextester . En particulier, la dernière ligne montre les autres méthodes échouant mais la méthode d'expression régulière réussissant.
Fonction :
Usage:
la source
Cette déclaration supprimera et mettra à jour le contenu du champ de votre base de données
Pour supprimer les espaces dans la partie gauche de la valeur du champ
UPDATE table SET field1 = LTRIM (field1);
ex. UPDATE membre SET firstName = LTRIM (firstName);
Pour supprimer les espaces dans la partie droite de la valeur du champ
UPDATE table SETfield1 = RTRIM (champ1);
ex. UPDATE membre SET firstName = RTRIM (firstName);
la source
J'avais besoin de rogner les valeurs dans une colonne de clé primaire contenant le prénom et le nom, je ne voulais donc pas rogner tout l'espace blanc car cela supprimerait l'espace entre le prénom et le nom, que je devais conserver. Ce qui a fonctionné pour moi était ...
ou
ou
Notez que la première instance de FIELD est entre guillemets simples mais la seconde n'est pas du tout entre guillemets. J'ai dû le faire de cette façon ou cela m'a donné une erreur de syntaxe disant que c'était une clé primaire en double alors que j'avais les deux entre guillemets.
la source
Si vous devez utiliser trim dans la requête de sélection, vous pouvez également utiliser des expressions régulières
renvoie les lignes avec un champ comme 'query-string'
la source
vous pouvez utiliser ltrim ou rtrim pour nettoyer les espaces pour la droite ou la gauche ou une chaîne.
la source
Vous pouvez utiliser le sql suivant, UPDATE
TABLE
SETColumn
= replace (Column, '', '')la source
Je sais que c'est déjà accepté, mais pour ceux comme moi qui recherchent "supprimer TOUS les espaces" (pas seulement au début et à la fin de la chaîne):
EDIT 2019/6/20: Ouais, ce n'est pas bon. La fonction retourne la partie de la chaîne depuis "quand l'espace de caractères s'est produit pour la première fois". Donc, je suppose que dire cela supprime les espaces blancs de début et de fin et renvoie le premier mot:
la source