Analizzare e formattare stringhe
SUBSTRING, posizione, suddivisione e conversione delle maiuscole e minuscole nei vari dialetti.
Analizzare e formattare stringhe è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Perché vengono chieste le funzioni sulle stringhe
I dati reali sono disordinati: nomi completi da suddividere, domini email da estrarre, codici incorporati negli ID, maiuscole e minuscole incoerenti. Gli intervistatori usano la manipolazione delle stringhe per verificare se si è in grado di pulire e trasformare il testo senza esportarlo in uno script.
Come per le date, le funzioni sono solo parzialmente standardizzate, quindi l'obiettivo è conoscere il concetto e le varianti più comuni.
- Estrazione di sottostringhe e posizione
- Concatenazione
- Suddivisione e sostituzione
- Conversione delle maiuscole e delle minuscole e rimozione degli spazi
SUBSTRING e posizione
SUBSTRING(s FROM start FOR length) è la forma dello standard SQL; la maggior parte dei motori accetta anche SUBSTRING(s, start, length). Le posizioni nelle stringhe partono da 1: è il classico errore off-by-one per chi programma in linguaggi con indicizzazione da 0.
POSITION(sub IN s) (oppure STRPOS/CHARINDEX) individua l'inizio di una sottostringa e restituisce 0 quando non la trova.
SELECT
SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year, -- '2024'
POSITION('-' IN 'INV-2024-042') AS first_dash; -- 4Estrarre il dominio di un'email
Un esempio pratico fondamentale. Si individua @, poi si prende tutto ciò che lo segue. Combinare POSITION e SUBSTRING è l'approccio portabile.
In PostgreSQL si può usare anche SPLIT_PART(email, '@', 2), che rende l'intento più chiaro ed è la soluzione idiomatica che vale la pena menzionare.
-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;Concatenazione tra diversi dialetti
L'unione delle stringhe dipende dal dialetto e gli intervistatori si aspettano che se ne conoscano le varianti.
- Standard SQL / Postgres / Oracle: l'operatore
||. - MySQL:
CONCAT(a, b, c)(l'operatore||è un OR logico per impostazione predefinita). - SQL Server:
+per le stringhe oppureCONCAT().
CONCAT() tratta NULL come una stringa vuota, mentre || e + in genere rendono NULL l'intero risultato se uno degli operandi è NULL: è una sottile fonte di bug.
-- 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;La trappola della concatenazione con NULL
Riprendendo l'esempio precedente: se last_name è NULL, allora first_name || ' ' || last_name restituisce NULL in Postgres, eliminando l'intero nome.
La correzione difensiva consiste nell'usare COALESCE sulle parti che possono essere NULL, oppure CONCAT_WS (concatenazione con separatore), che ignora i valori NULL e inserisce il separatore solo tra i valori presenti.
-- 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;Suddividere le stringhe
"Estrarre il terzo segmento da un codice con trattini" è un test della suddivisione delle stringhe. SPLIT_PART(s, delim, n) di PostgreSQL restituisce direttamente l'ennesimo elemento ed è lo strumento più chiaro.
MySQL non dispone di una suddivisione diretta; l'idioma consiste nell'annidare SUBSTRING_INDEX: si prendono i primi n elementi, poi l'ultimo di questi.
-- 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'Sostituire, rimuovere spazi e riempire
Operazioni di pulizia che gli intervistatori si aspettano di conoscere:
REPLACE(s, from, to)sostituisce tutte le occorrenze.TRIM(s)rimuove gli spazi iniziali e finali;TRIM(BOTH 'x' FROM s)rimuove un carattere specifico.LPAD(s, len, ch)/RPADcompletano fino a una larghezza fissa, utile per aggiungere zeri iniziali agli ID.
SELECT
REPLACE('555.123.4567', '.', '-') AS phone, -- 555-123-4567
TRIM(' hello ') AS clean, -- 'hello'
LPAD('42', 6, '0') AS padded; -- '000042'Conversione delle maiuscole e lunghezza
Normalizzare le maiuscole e le minuscole è essenziale prima di confrontare o raggruppare il testo. UPPER e LOWER sono universali; INITCAP (Postgres/Oracle) converte le parole nel formato titolo.
LENGTH(s) restituisce il numero di caratteri nella maggior parte dei motori, ma occorre fare attenzione: SQL Server usa LEN() e, in alcune configurazioni, LENGTH conta i byte per il testo multibyte. È una sottigliezza da menzionare quando si lavora con dati non ASCII.
SELECT
LOWER(email) AS email_norm,
INITCAP(city) AS city_pretty, -- Postgres
LENGTH(description) AS chars
FROM places;Corrispondenza di pattern oltre LIKE
Quando LIKE non è abbastanza potente, gli intervistatori apprezzano la familiarità con le espressioni regolari. PostgreSQL offre l'operatore ~ e REGEXP_REPLACE / REGEXP_MATCHES; MySQL dispone di REGEXP / REGEXP_SUBSTR.
Esempio: mantenere solo le cifre di una stringa contenente un numero di telefono. Un'espressione regolare risolve il problema in una sola riga, invece di richiedere una catena di chiamate a REPLACE.
-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
AS digits; -- '5551234567'Esempio avanzato: normalizzare e deduplicare i nomi
Un'attività di pulizia combinata. Supponiamo che i nomi arrivino con spazi superflui e maiuscole e minuscole miste, causando duplicati apparenti. Prima si normalizza, poi si raggruppa.
Si rimuovono gli spazi iniziali e finali, si comprime lo spazio interno con un'espressione regolare e si converte tutto in minuscolo prima di contare i valori distinti. È esattamente il tipo di ragionamento in più passaggi che gli intervistatori premiano.
SELECT
LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;Convertire stringhe in numeri e date
Le colonne stringa spesso contengono valori che dovrebbero essere numeri o date. CAST(s AS INTEGER) oppure la sintassi abbreviata di Postgres s::int esegue la conversione, ma fallisce in presenza di input non valido.
Per le date, TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) analizza il valore usando una maschera di formato esplicita: è l'approccio più sicuro perché elimina l'ambiguità sull'ordine di giorno e mese.
SELECT
CAST(qty_text AS INTEGER) AS qty,
TO_DATE(order_str, 'DD/MM/YYYY') AS order_date
FROM staging;Verifica rapida
Ragioni sul comportamento di NULL nella concatenazione delle stringhe.
Riepilogo: analizzare e formattare le stringhe
Punti chiave da portare al colloquio:
- Le posizioni nelle stringhe partono da 1;
SUBSTRING+POSITIONconsentono di estrarre in base alla posizione. - Si concatena con
||(Postgres),CONCAT(MySQL) o+(SQL Server), ricordando la propagazione di NULL; è preferibileCONCAT_WS. - Si suddivide con
SPLIT_PART(Postgres) oppure conSUBSTRING_INDEXannidato (MySQL). REPLACE,TRIM,LPAD,UPPER/LOWERpuliscono e normalizzano; le espressioni regolari gestiscono i casi più complessi.- Si normalizzano maiuscole, minuscole e spazi prima del raggruppamento per evitare duplicati apparenti.
Domande Frequenti
La lezione «Analizzare e formattare stringhe» è gratuita?
Sì — il testo completo di «Analizzare e formattare stringhe» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Analizzare e formattare stringhe»?
SUBSTRING, posizione, suddivisione e conversione delle maiuscole e minuscole nei vari dialetti. Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Analizzare e formattare stringhe»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Aritmetica delle date e intervalli
- Troncare e raggruppare le date
- Analizzare e formattare stringhe
- Fusi orari e timestamp