Problem:
Du vil gerne finde en understreng, der matcher et mønster i en streng.
Eksempel:
Vores database har en tabel med navnet kunde med data i følgende kolonner:id
, first_name
, last_name
og city
.
id | fornavn | efternavn | by |
---|---|---|---|
1 | Alan | Watson | Madrid |
2 | Lisa | Sort | Singapore |
3 | Laura | Williams | Seattle |
4 | Milano | Brick | Seoul |
Lad os se nogle eksempler på mønstermatching i SQL.
Eksempel 1:
Lad os vise fornavn, efternavn og by for hver kunde, hvis bynavn starter med bogstavet 'S'.
Løsning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%';
efternavn | fornavn | by |
---|---|---|
Lisa | Sort | S ingapore |
Milano | Brick | S eoul |
Laura | Williams | S eattle |
Vi brugte jokertegnet %, som repræsenterer nul eller flere ukendte tegn. Dette jokertegn kan bruges hvor som helst i strengen.
Eksempel 2:
Lad os vise fornavnet, efternavnet og byen for hver kunde, hvis bynavn indeholder præcis fem tegn.
Løsning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE '_____';
Her er resultatet:
efternavn | fornavn | by |
---|---|---|
Milano | Brick | Seoul |
Understregnings-jokertegnet kan bruges til at repræsentere et enkelt ukendt tegn. Ved at bruge fem af dem i træk kan vi således repræsentere alle strenge, der er fem tegn lange. I vores eksempel er den eneste by, der matcher denne beskrivelse, Seoul.
Eksempel 3:
Lad os vise fornavnet, efternavnet og byen for hver kunde, hvis by starter med bogstavet "S" og har bogstavet "o" som det tredje-til-sidste tegn.
Løsning:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%o__';
Her er resultatet:
efternavn | fornavn | by |
---|---|---|
Lisa | Sort | S ingapo re |
Milano | Brick | S eo ul |
Forespørgslen returnerede kun to poster:Lisa Black fra S ingapo re og Milan Brick fra S eo ul. Disse byer matcher det givne mønster. Her kombinerede vi begge jokertegn for at generere et mere specifikt mønster:alle strenge, der begynder med et stort bogstav 'S' og indeholder et vilkårligt antal andre tegn efter det, så længe det tredje-til-sidste tegn er et lille bogstav 'o. '
Diskussion:
Hvis du vil vælge poster, hvor en streng matcher et bestemt mønster, kan du bruge en LIKE
klausul som betingelsen i en WHERE
klausul. Efter WHERE
, angiv navnet på kolonnen (f.eks. city
) efterfulgt af en LIKE
klausul, der specificerer strengmønsteret (f.eks. 'S%o__'
) for at søge efter.
Som vi så i eksemplerne, kan du bruge to specialtegn kendt som jokertegn for at repræsentere ukendte tegn:
- Jokertegnet '%' angiver nul eller flere tegn.
- Jokertegnet '_' angiver ethvert enkelt tegn.
Du kan kombinere disse jokertegn for at opnå nogle virkelig kraftfulde resultater. Du kan også sammenkæde mere end én LIKE
tilstand. Endelig kan du bruge NOT
operator for at finde strenge, der ikke match det givne mønster.