Analyser et formater des chaînes
SUBSTRING, position, découpage et changement de casse selon les dialectes
Analyser et formater des chaînes est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.
Pourquoi les fonctions de chaînes sont souvent demandées
Les données réelles sont désordonnées : noms complets à découper, domaines de messagerie à extraire, codes intégrés dans des identifiants, casse incohérente. Les recruteurs utilisent la manipulation des chaînes pour vérifier que vous savez nettoyer et restructurer du texte sans l’exporter vers un script.
Comme pour les dates, ces fonctions sont seulement partiellement normalisées ; l’objectif est donc de connaître le concept et les variantes courantes.
- Extraction de sous-chaînes et recherche de position
- Concaténation
- Découpage et remplacement
- Conversion de la casse et suppression des espaces superflus
SUBSTRING et position
SUBSTRING(s FROM start FOR length) est la forme définie par la norme SQL ; la plupart des moteurs acceptent également SUBSTRING(s, start, length). Les positions dans les chaînes sont indexées à partir de 1, ce qui constitue un piège classique d’erreur de décalage d’une unité pour les programmeurs habitués aux langages indexés à partir de 0.
POSITION(sub IN s) (ou STRPOS/CHARINDEX) recherche le début d’une sous-chaîne et renvoie 0 lorsqu’elle est introuvable.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Extraire un domaine de messagerie
Un exemple classique. Trouvez le caractère @, puis prenez tout ce qui le suit. Combiner POSITION et SUBSTRING est l’approche compatible avec plusieurs systèmes.
Dans PostgreSQL, vous pouvez aussi utiliser SPLIT_PART(email, '@', 2), qui est plus lisible et mérite d’être mentionné comme formulation idiomatique.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Concaténation selon les dialectes
La concaténation des chaînes dépend du dialecte, et les recruteurs attendent de vous que vous connaissiez les variantes.
- Norme SQL / Postgres / Oracle : l’opérateur
||. - MySQL :
CONCAT(a, b, c)(l’opérateur||représente par défaut l’opérateur logique OR). - SQL Server :
+pour les chaînes, ouCONCAT().
CONCAT() traite NULL comme une chaîne vide, tandis que || et + rendent généralement tout le résultat NULL si l’un des opérandes vaut NULL ; cela constitue une source subtile d’erreurs.
-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;
-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;Le piège de la concaténation avec NULL
Pour reprendre la scène précédente : si last_name vaut NULL, alors first_name || ' ' || last_name renvoie NULL dans Postgres, ce qui efface tout le nom.
La solution préventive consiste à appliquer COALESCE aux éléments pouvant être NULL, ou à utiliser CONCAT_WS (concaténation avec séparateur), qui ignore les valeurs NULL et insère le séparateur uniquement entre les valeurs présentes.
-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;
-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;Découper les chaînes
« Extraire le troisième segment d’un code séparé par des tirets » évalue votre capacité à découper des chaînes. Le SPLIT_PART(s, delim, n) de PostgreSQL renvoie directement le n-ième élément et constitue l’outil le plus clair.
MySQL ne possède pas de fonction directe de découpage ; la tournure usuelle repose sur un SUBSTRING_INDEX imbriqué : prenez les n premiers éléments, puis le dernier de ceux-ci.
-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'
-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'REPLACE, TRIM et remplissage
Voici les opérations de nettoyage que les recruteurs s’attendent à vous voir utiliser immédiatement :
REPLACE(s, from, to)remplace toutes les occurrences.TRIM(s)supprime les espaces au début et à la fin ;TRIM(BOTH 'x' FROM s)supprime un caractère précis.LPAD(s, len, ch)/RPADcomplètent jusqu’à une largeur fixe, ce qui est pratique pour ajouter des zéros aux identifiants.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Conversion de la casse et longueur
Normaliser la casse est essentiel avant de comparer ou de regrouper du texte. UPPER et LOWER sont universels ; INITCAP (Postgres/Oracle) convertit les mots en casse de titre.
LENGTH(s) renvoie le nombre de caractères dans la plupart des moteurs, mais attention : SQL Server utilise LEN(), et dans certaines configurations LENGTH compte les octets pour les textes multioctets. Mentionnez cette nuance pour les données non-ASCII.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Recherche de motifs au-delà de LIKE
Lorsque LIKE n’est pas assez puissant, les recruteurs apprécient que vous connaissiez les expressions régulières. PostgreSQL propose l’opérateur ~ et REGEXP_REPLACE / REGEXP_MATCHES ; MySQL possède REGEXP / REGEXP_SUBSTR.
Exemple : ne conserver que les chiffres d’une chaîne contenant un numéro de téléphone. Une expression régulière permet de faire cela en une seule instruction, plutôt qu’avec une succession d’appels à REPLACE.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Exemple approfondi : normaliser et dédupliquer les noms
Une tâche de nettoyage combinée. Supposons que les noms arrivent avec des espaces superflus et une casse variable, ce qui crée de faux doublons. Normalisez-les d’abord, puis regroupez-les.
Supprimez les espaces superflus, réduisez les espaces internes multiples à l’aide d’une expression régulière, puis convertissez en minuscules avant de compter les valeurs distinctes. C’est exactement le type de raisonnement en plusieurs étapes que les recruteurs valorisent.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Convertir des chaînes en nombres et en dates
Les colonnes de chaînes contiennent souvent des valeurs qui devraient être des nombres ou des dates. CAST(s AS INTEGER) ou la notation abrégée de Postgres s::int effectue la conversion, mais échoue lorsque les données d’entrée sont incorrectes.
Pour les dates, TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) analyse la chaîne avec un masque de format explicite ; c’est l’approche la plus sûre, car elle supprime toute ambiguïté concernant l’ordre du jour et du mois.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Vérification rapide
Analysez le comportement de NULL lors de la concaténation de chaînes.
Récapitulatif : analyser et formater les chaînes
Points essentiels à retenir pour l’entretien :
- Les positions dans les chaînes sont indexées à partir de 1 ;
SUBSTRINGetPOSITIONpermettent d’extraire selon la position. - Concaténez avec
||(Postgres),CONCAT(MySQL) ou+(SQL Server), et n’oubliez pas la propagation de NULL ; préférezCONCAT_WS. - Découpez avec
SPLIT_PART(Postgres) ou avec unSUBSTRING_INDEXimbriqué (MySQL). REPLACE,TRIM,LPAD,UPPER/LOWERnettoient et normalisent ; les expressions régulières traitent les cas complexes.- Normalisez la casse et les espaces avant le regroupement afin d’éviter les faux doublons.
Questions Fréquemment Posées
La leçon « Analyser et formater des chaînes » est-elle gratuite ?
Oui — le texte complet de « Analyser et formater des chaînes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Analyser et formater des chaînes » ?
SUBSTRING, position, découpage et changement de casse selon les dialectes Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?
Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Analyser et formater des chaînes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?
Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Calcul arithmétique sur les dates et intervalles
- Tronquer et regrouper les dates
- Analyser et formater des chaînes
- Fuseaux horaires et horodatages