Problem:
Du vill hitta en delsträng som matchar ett mönster i en sträng.
Exempel:
Vår databas har en tabell som heter kund med data i följande kolumner:id
, first_name
, last_name
och city
.
id | förnamn | efternamn | stad |
---|---|---|---|
1 | Alan | Watson | Madrid |
2 | Lisa | Svart | Singapore |
3 | Laura | Williams | Seattle |
4 | Milano | Brick | Seoul |
Låt oss se några exempel på mönstermatchning i SQL.
Exempel 1:
Låt oss visa förnamn, efternamn och stad för varje kund vars stadsnamn börjar med bokstaven 'S'.
Lösning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%';
efternamn | förnamn | stad |
---|---|---|
Lisa | Svart | S ingapore |
Milano | Brick | S eoul |
Laura | Williams | S eattle |
Vi använde jokertecken %, som representerar noll eller fler okända tecken. Detta jokertecken kan användas var som helst i strängen.
Exempel 2:
Låt oss visa förnamn, efternamn och stad för varje kund vars stadsnamn innehåller exakt fem tecken.
Lösning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE '_____';
Här är resultatet:
efternamn | förnamn | stad |
---|---|---|
Milano | Brick | Seoul |
Understrecket jokertecken kan användas för att representera ett enda okänt tecken. Genom att använda fem av dem i rad kan vi alltså representera alla strängar som är fem tecken långa. I vårt exempel är den enda staden som matchar den beskrivningen Seoul.
Exempel 3:
Låt oss visa förnamn, efternamn och stad för varje kund vars stad börjar med bokstaven "S" och har bokstaven "o" som tredje till sista tecknet.
Lösning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%o__';
Här är resultatet:
efternamn | förnamn | stad |
---|---|---|
Lisa | Svart | S ingapo re |
Milano | Brick | S eo ul |
Frågan returnerade endast två poster:Lisa Black från S ingapo re och Milan Brick från S eo ul. Dessa städer matchar det givna mönstret. Här kombinerade vi båda jokertecken för att skapa ett mer specifikt mönster:alla strängar som börjar med stor bokstav 'S' och innehåller valfritt antal andra tecken efter det, så länge som det tredje till sista tecknet är en liten bokstav 'o. '
Diskussion:
Om du vill välja poster där en sträng matchar ett specifikt mönster, kan du använda en LIKE
sats som villkoret i en WHERE
klausul. Efter WHERE
, lista namnet på kolumnen (t.ex. city
) följt av en LIKE
sats som anger strängmönstret (t.ex. 'S%o__'
) för att söka efter.
Som vi såg i exemplen kan du använda två specialtecken som kallas jokertecken för att representera okända tecken:
- Jokertecknet '%' anger noll eller fler tecken.
- Jokertecken '_' anger vilket enskilt tecken som helst.
Du kan kombinera dessa jokertecken för att uppnå några riktigt kraftfulla resultat. Du kan också koppla ihop mer än en LIKE
tillstånd. Slutligen kan du använda NOT
operatorn för att hitta strängar som inte gör det matcha det givna mönstret.