Astuce SQL pour supprimer le premier ou dernier caractère d’une colonne

Il arrive que dans une base de données, un champ possède un caractère en trop en début ou en fin d’une colonne. Il est alors pratique d’exclure ou de supprimer ce caractère en trop. Cet article présente plusieurs requêtes SQL pour exclure le premier ou le dernier caractère contenu dans une colonne d’une base de données.

Supprimer des caractères d'une colonne SQL

Supprimer des caractères d’une colonne SQL

Exclure le premier caractère

Pour exclure le premier caractère il convient d’utiliser la fonction SUBSTR() qui permet d’extraire une partie d’une chaine:

SELECT SUBSTR(nom_colonne, 2) AS colonne_sans_first
FROM table
WHERE condition

A savoir : la fonction est appelée différemment selon le système de gestion de base de données :

  • MySQL : SUBSTR(), SUBSTRING()
  • PostgreSQL : SUBSTR(), SUBSTRING()
  • Oracle : SUBSTR()
  • SQL Server : SUBSTRING()

Supprimer le premier caractère

Il est aussi possible de supprimer une bonne fois pour toute le premier caractère en mettant à jour avec UPDATE. Pour cela, il est possible d’utiliser la requête SQL suivante :

UPDATE table
SET nom_colonne = SUBSTR(nom_colonne, 2)
WHERE condition

Cette requête utilise encore une fois la fonction SUBSTR() pour extraire toute la chaîne excepté le premier caractère.

A savoir : il est possible de supprimer plus d’un caractère en début de chaîne en modifiant la valeur 2.

Exclure le dernier caractère

Il est également possible de supprimer le dernière caractère d’une chaîne dans le résultat d’une requête SQL. C’est un peu compliqué, mais la requête ressemble à ceci:

SELECT nom_colonne, SUBSTR(nom_colonne, 1, CHAR_LENGTH(nom_colonne) - 1) AS colonne_sans_last
FROM table
WHERE condition

En détaillant, on remarque que ce n’est pas si dur que cela. Il suffit de tronquer en utilisant SUBSTRING de 1 jusqu’à la taille maximum moins 1 caractère.

A savoir : la fonction CHAR_LENGTH() peut s’appeler de plusieurs façon différente selon le système de gestion de base de données:

  • MySQL : CHAR_LENGTH ou CHARACTER_LENGTH()
  • PostgreSQL : CHAR_LENGTH ou CHARACTER_LENGTH()
  • Oracle : CHAR_LENGTH ou CHARACTER_LENGTH()
  • SQL Server : LEN()

Supprimer le dernier caractère

Pour mettre à jour une table en supprimant le dernier caractère d’une chaîne, il suffit d’utiliser la même astuce que précédemment mais dans une requête UPDATE:

UPDATE table
SET nom_colonne = SUBSTR(nom_colonne, 1, CHAR_LENGTH(nom_colonne) - 1)
WHERE condition

Mot de la fin

Ces exemples de requête peuvent être utiles lorsqu’on se rend compte par exemple qu’un champ est enregistré entre parenthèses et que ces parenthèses peuvent être supprimées.

Astuce : Il faut toutefois veiller à ce que la colonne qui est mise à jour possède au minimum 1 caractère. Dès lors, il faut penser à utiliser la condition WHERE pour exclure les enregistrements dans lequel la chaîne est vide avec un condition qui ressemble à ceci:

WHERE nom_colonne <> ''
Ce contenu a été publié dans Astuces.

A propos de l'auteur : Tony Archambeau

Fort de plusieurs années d’expérience dans le développement web, Tony partage ses connaissances sur des projets divers dont le site infowebmaster.fr.
Il est possible de le suivre sur Twitter.

Partager

3 réflexions au sujet de « Astuce SQL pour supprimer le premier ou dernier caractère d’une colonne »

  1. nicolas dit :

    bonjour,

    dans un select je cherche à retirer les 0 qui se trouve au debut de ma chaine de caracteres, exemple 0000123456 je ne veux afficher que 123456 dans le resultat du select. savez vous comment je peux faire ?

    par avance merci.
    Nicolas

  2. gbueno3 dit :

    bonjour,

    Tu peux commencer par effacer les zéros avec SUBSTR() et ensuite faire un select classique.

  3. bogue dit :

    Sinon il faut transformer la chaîne de caractères en nombre…
    1ère solution (Oracle) :
    SELECT TO_NUMBER(‘0000123456’)
    FROM DUAL

    2ème solution (Oracle, SQL Server) :
    SELECT CAST(‘0000123456’ AS NUMBER)
    FROM DUAL

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *