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 APercentuale 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 charactersQuando % 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 labelEseguire 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_bLa 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:
LIKEdistingue tra maiuscole e minuscole; usiILIKEper 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 TOe 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 diESCAPEe anteponga il carattere jolly - La distinzione tra maiuscole e minuscole varia a seconda del motore;
LOWER()su entrambi i lati è la correzione portabile (Postgres haILIKE) - 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
- Precedenza di AND/OR e uso delle parentesi
- BETWEEN, IN e limiti inclusivi
- LIKE, caratteri jolly ed escaping
- Filtrare in base a valori calcolati