SQL – Nettoyer un champs des retours à la ligne
Quelque fois vous avez des applications avec une IHM (Interface Homme Machine) qui ne respecte pas forcément les types de champs de vos bases de données, ou du moins qui permettent l’insertion de données erronées. Cela peut être gênant lorsque vous réutilisez ces données. J’ai eu le cas, il y a peu, de champs varchar
, dans une base de données PostgreSQL
, contenant des retours à la ligne à la fin du champs. Cela était possible, car les utilisateurs faisaient du copier / coller de données provenant de sources diverses sur l’IHM. La première chose à faire fût de modifier l’IHM afin de nettoyage ces champs des caractères non-désirés. La seconde et celle dont je vais vous parler ici a été le nettoyage de l’ensemble des données de la base de données.
Un champs de type varchar
, utilisé en tant que conteneur de données textuelles, peut contenir des caractères non-visibles tels que les retours chariot \r, nouvelles lignes \n, espaces et les tabulations \t. Cependant dans mon cas précis, ces caractères sont indésirables.
La commande SQL pour supprimer mes caractères indésirables du champs myfield
de la table mytable
est la suivante :
update mytable set myfield = trim(both E' \t\r\n' from myfield);
La commande trim supprime les tabulations, espaces, retours à la ligne et nouvelles lignes présents au début et à la fin de chaque valeur du champ myfield
. Elle est disponible sous la plupart des moteurs de base de données SQL
, notamment MySQL
et PostgreSQL
.
Pour supprimer uniquement au début de champs, remplacez both
par leading
. Pour supprimer à la fin de champs, remplaces le both
par trailing
.
Cette commande permet de supprimer tous les caractères que l’on ne désire pas dans le champs tant qu’ils sont en début ou en fin de champs. Exemple :
postgres=# select trim(both 'abc' from 'aabctatabcbca'); btrim ------- tat (1 ligne)
Dans cette commande, nous demandons de supprimer les lettres a, b ou c si elles se trouve en début ou en fin de chaîne. Je n’ai pas désigné la chaîne tel que E'abc'
car le E
spécifie la présence de caractères spéciaux.
tata
hors le dernier a a été supprimé.En passant, en Python la commande à utiliser pour nettoyer ses entrées des caractères invisibles est la fonction str().strip()
.