LIKE, jokertecken och escape
Mönstermatchning, procent kontra understreck och hur du escaper bokstavliga jokertecken
LIKE, jokertecken och escape är en gratis lektion i Förberedelser inför SQL-intervjun på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Mönstermatchning under intervjun
LIKE ser enkelt ut men döljer tre klassiska intervjufällor: att förväxla % med _, att glömma att ett bokstavligt procenttecken eller understreck i datan måste escap:as och den överraskande skiftlägeskänsligheten som varierar mellan databaser.
Den här lektionen går igenom de två jokertecknen, ESCAPE-satsen och reglerna mellan olika SQL-dialekter som en intervjuare kommer att undersöka för att skilja juniorer från personer som har levererat riktiga sökfunktioner.
De två jokertecknen
LIKE har exakt två jokertecken:
%matchar noll eller fler tecken_matchar exakt ett tecken
'a%' matchar alltså allt som börjar med a, medan 'a_' matchar en sträng med två tecken som börjar med a. Att blanda ihop dessa är det vanligaste LIKE-felet.
SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with AProcenttecknet var som helst
Placera % för att styra var matchningen förankras:
'%son'slutar på son (Johnson, Mason)'%mary%'innehåller mary var som helst'J%n'börjar med J och slutar med n
Ett ensamt '%' matchar varje rad som inte är NULL. NULL-värden matchar aldrig något LIKE-mönster, inte ens '%'.
SELECT *
FROM customers
WHERE email LIKE '%@gmail.com';Understreck för fast längd
_ matchar ett godtyckligt enskilt tecken och är användbart för koder med fast bredd. 'A__' matchar exakt tre tecken som börjar med A, varken fler eller färre.
Intervjuare testar detta med produktkoder eller landskoder. Kandidaten som skriver 'A%' när frågan gäller en tresiffrig kod som börjar med A har gjort ett subtilt fel och returnerar A-följt av vad som helst.
SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more charactersNär % och _ finns i datan
Vad gör man om man behöver hitta värden som bokstavligen innehåller ett procenttecken, till exempel en rabattetikett som '50% rabatt'? Att skriva LIKE '%50%%' fungerar inte, eftersom det avslutande % behandlas som ett jokertecken och inte som ett bokstavligt tecken.
SQL måste få veta att ett visst tecken ska behandlas bokstavligt. Det är det som ESCAPE-satsen används till.
ESCAPE-satsen
Deklarera ett escape-tecken med ESCAPE och sätt det före varje jokertecken som ska behandlas bokstavligt. Här är ! escape-tecknet, så !% betyder ett bokstavligt procenttecken.
Detta hittar värden som innehåller den bokstavliga texten 50% var som helst. Escape-tecknet kan väljas fritt; välj ett som inte förekommer i söktexten.
SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in labelEscape av ett bokstavligt understreck
Understreck förekommer ofta i användarnamn och identifierare, och ett understreck utan escape matchar obemärkt vilket tecken som helst. För att hitta e-postadresser som bokstavligen börjar med 'a_b' måste understrecket escap:as.
Utan escape skulle 'a_b%' också matcha 'axb', 'a9b' och så vidare. Det här felet går ständigt ut i produktion eftersom frågan utan escape fortfarande returnerar rader som ser rimliga ut.
SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_bSkiftlägeskänslighet varierar mellan databaser
Om LIKE är skiftlägeskänsligt beror på motorn och kollationen:
- PostgreSQL:
LIKEär skiftlägeskänsligt; användILIKEför skiftlägesokänsliga sökningar - MySQL: beror på kolumnens kollation och är ofta skiftlägesokänsligt som standard
- SQL Server: beror på kollationsinställningen
Det portabla och tydliga sättet är att göra båda sidorna till gemener.
SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';Den dolda prestandakostnaden
Ett inledande jokertecken som '%son' kan inte använda ett normalt B-tree-index, eftersom indexet är sorterat efter prefix och början inte är förankrad. Motorn måste skanna varje rad.
'son%' (avslutande jokertecken med förankrat prefix) kan använda ett index. Intervjuare frågar gärna varför en LIKE-sökning är långsam; det inledande % är oftast svaret.
-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'Alternativ till LIKE
När LIKE inte räcker kan du nämna alternativen för att visa bredare kunskap:
SIMILAR TOoch POSIX-reguljära uttryck (~,~*) i PostgreSQL för riktiga reguljära uttryck- Fulltextindex för stora textkorpusar
- Trigramindex (pg_trgm) som gör sökningar med inledande jokertecken snabba
Att nämna dessa visar att du vet att LIKE är grundnivån, inte taket, för textsökning.
Skapa LIKE-mönster säkert från användarinmatning
Intervjuare frågar ofta: hur söker ni efter en term som användaren har skrivit in med LIKE utan att något går sönder? Två risker att nämna:
- Injektion — bind värdet som en parameter; sammanfoga aldrig rå indata med SQL-strängen.
- Oescapade jokertecken — om indata själv innehåller
%eller_måste ni escapa dem så att de matchar bokstavligt.
Bind parametern och lägg sedan till era egna jokertecken i frågan.
-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';Snabbkontroll
Kom ihåg skillnaden mellan de två jokertecknen.
Sammanfattning
Viktiga slutsatser:
%matchar noll eller fler tecken;_matchar exakt ett- För att matcha ett bokstavligt
%eller_i datan deklarerar du ett escape-tecken och sätter det före jokertecknet - Skiftlägeskänsligheten varierar mellan motorer;
LOWER()på båda sidor är den portabla lösningen (Postgres harILIKE) - Ett inledande jokertecken tvingar fram en fullständig skanning; ett förankrat prefix kan använda ett index
Ett _ utan escape är ett tyst fel: det returnerar fortfarande rader som ser rimliga ut.
Lär dig SQL med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”LIKE, jokertecken och escape” gratis?
Ja – hela texten till ”LIKE, jokertecken och escape” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Vad lär jag mig i ”LIKE, jokertecken och escape”?
Mönstermatchning, procent kontra understreck och hur du escaper bokstavliga jokertecken Ni övar på Förberedelser inför SQL-intervjun med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Förberedelser inför SQL-intervjun?
Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”LIKE, jokertecken och escape”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Förberedelser inför SQL-intervjun-lektionen?
Ja. Varje Förberedelser inför SQL-intervjun-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- AND/OR-prioritet och parenteser
- BETWEEN, IN och inkluderande gränser
- LIKE, jokertecken och escape
- Filtrera på beräknade värden