0Pricing
Coding Interview Prep · Lezione

LIKE, caratteri jolly ed escaping

Corrispondenza dei pattern, differenza tra percentuale e underscore ed escape dei caratteri jolly letterali

LIKE, caratteri jolly ed escaping è 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.

Corrispondenza dei pattern sotto esame al colloquio

LIKE sembra semplice, ma nasconde tre classiche insidie da colloquio: confondere % con _, dimenticare che un carattere percentuale o un underscore letterale nei dati richiede l'escape e la sorpresa della distinzione tra maiuscole e minuscole, che varia a seconda del database.

Questa lezione approfondisce i due caratteri jolly, la clausola ESCAPE e le regole indipendenti dal dialetto che un intervistatore verificherà per distinguere i principianti da chi ha messo in produzione funzionalità di ricerca reali.

I due caratteri jolly

LIKE ha esattamente due caratteri jolly:

  • % corrisponde a zero o più caratteri
  • _ corrisponde a esattamente un carattere

Quindi 'a%' corrisponde a qualsiasi stringa che inizi con a, mentre 'a_' corrisponde a una stringa di due caratteri che inizi con a. Confonderli è l'errore più comune con LIKE.

SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with A

Percentuale in qualsiasi posizione

Posizioni il carattere % per controllare il punto in cui il confronto deve essere ancorato:

  • '%son' termina con son (Johnson, Mason)
  • '%mary%' contiene mary in qualsiasi posizione
  • 'J%n' inizia con J e termina con n

Un semplice '%' corrisponde a ogni riga non NULL. I valori NULL non corrispondono mai ad alcun pattern LIKE, incluso '%'.

SELECT *
FROM customers
WHERE email LIKE '%@gmail.com';

Underscore per una lunghezza fissa

_ corrisponde a un singolo carattere arbitrario ed è utile per i codici a larghezza fissa. 'A__' corrisponde esattamente a tre caratteri che iniziano con A, non uno di più né uno di meno.

Gli intervistatori verificano questo aspetto usando codici prodotto o codici paese. Il candidato che scrive 'A%' quando gli viene chiesto un codice di tre caratteri che inizi con A sbaglia in modo sottile, restituendo qualsiasi valore che inizi con A.

SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more characters

Quando % e _ compaiono nei dati

Che cosa succede se deve trovare valori che contengono letteralmente un simbolo di percentuale, come l'etichetta di uno sconto «50% di sconto»? Scrivere LIKE '%50%%' non funziona, perché il % finale viene trattato come un carattere jolly, non come un carattere letterale.

Deve indicare a SQL che un carattere specifico va trattato come letterale. A questo serve la clausola ESCAPE.

La clausola ESCAPE

Dichiari un carattere di escape con ESCAPE, quindi anteponga tale carattere a ogni carattere jolly che desidera trattare letteralmente. Qui ! è il carattere di escape, quindi !% indica un simbolo di percentuale letterale.

In questo modo trova valori che contengono il testo letterale 50% in qualsiasi posizione. Il carattere di escape è arbitrario: ne scelga uno che non compaia nel testo di ricerca.

SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in label

Eseguire l'escape di un underscore letterale

Gli underscore si nascondono nei nomi utente e negli identificatori, e un _ non sottoposto a escape corrisponde silenziosamente a qualsiasi carattere. Per trovare indirizzi email che iniziano letteralmente con 'a_b' è necessario eseguire l'escape dell'underscore.

Senza l'escape, 'a_b%' corrisponderebbe anche a 'axb', 'a9b' e così via. Questo bug arriva continuamente in produzione perché la query senza escape restituisce comunque righe dall'aspetto plausibile.

SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_b

La distinzione tra maiuscole e minuscole varia a seconda del database

Il fatto che LIKE distingua tra maiuscole e minuscole dipende dal motore e dalla collation:

  • PostgreSQL: LIKE distingue tra maiuscole e minuscole; usi ILIKE per ignorarle
  • MySQL: dipende dalla collation della colonna, che spesso non distingue tra maiuscole e minuscole per impostazione predefinita
  • SQL Server: dipende dall'impostazione della collation

L'approccio portabile ed esplicito consiste nel convertire entrambi i lati in minuscolo.

SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';

Il costo nascosto in termini di prestazioni

Un carattere jolly iniziale come '%son' non può usare un normale indice B-tree, perché l'indice è ordinato per prefisso e l'inizio non è ancorato. Il motore deve esaminare ogni riga.

'son%' (carattere jolly finale, prefisso ancorato) può usare un indice. Gli intervistatori adorano chiedere perché una ricerca LIKE sia lenta: il % iniziale è di solito la risposta.

-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'

Oltre LIKE

Quando LIKE non basta, menzioni le alternative per dimostrare la propria preparazione:

  • SIMILAR TO e le espressioni regolari POSIX (~, ~*) in PostgreSQL per le vere espressioni regolari
  • Indici per la ricerca full-text su grandi raccolte di testo libero
  • Indici trigramma (pg_trgm) per velocizzare le ricerche con caratteri jolly iniziali

Nominarle dimostra che sa che LIKE è il livello base, non il limite della ricerca testuale.

Creare pattern LIKE in sicurezza dall'input dell'utente

Gli intervistatori chiedono spesso: come si cerca un termine digitato dall'utente con LIKE senza incorrere in problemi? Citi due rischi:

  • Injection — associ il valore come parametro; non concateni mai l'input grezzo nella stringa SQL.
  • Wildcard non sottoposte a escape — se l'input contiene % o _, esegua l'escape in modo che corrispondano letteralmente.

Associ il parametro, poi aggiunga i propri caratteri jolly nella query.

-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';

Verifica rapida

Ricordi la differenza tra i due caratteri jolly.

Riepilogo

Punti chiave:

  • % corrisponde a zero o più caratteri; _ corrisponde esattamente a uno
  • Per trovare un % o un _ letterale nei dati, dichiari un carattere di ESCAPE e anteponga il carattere jolly
  • La distinzione tra maiuscole e minuscole varia a seconda del motore; LOWER() su entrambi i lati è la correzione portabile (Postgres ha ILIKE)
  • Un carattere jolly iniziale forza una scansione completa; un prefisso ancorato può usare un indice

Un _ senza escape è un bug silenzioso: restituisce comunque righe plausibili.

Domande Frequenti

La lezione «LIKE, caratteri jolly ed escaping» è gratuita?

Sì — il testo completo di «LIKE, caratteri jolly ed escaping» è 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 «LIKE, caratteri jolly ed escaping»?

Corrispondenza dei pattern, differenza tra percentuale e underscore ed escape dei caratteri jolly letterali 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 «LIKE, caratteri jolly ed escaping»?

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

  1. Precedenza di AND/OR e uso delle parentesi
  2. BETWEEN, IN e limiti inclusivi
  3. LIKE, caratteri jolly ed escaping
  4. Filtrare in base a valori calcolati
← Torna a Coding Interview Prep