I MySQL er LIKE
operatør udfører mønstermatchning ved hjælp af et SQL-mønster.
Hvis strengen matcher det angivne mønster, er resultatet 1
, ellers er det 0
.
Mønsteret behøver ikke nødvendigvis at være en bogstavelig streng. Denne funktion kan bruges med strengudtryk og tabelkolonner.
Syntaks
Syntaksen ser sådan ud:
expr LIKE pat [ESCAPE 'escape_char']
Hvor expr
er inputstrengen og pat
er det mønster, som du tester strengen for.
Den valgfri ESCAPE
klausul giver dig mulighed for at angive et escape-tegn. Standard escape-tegnet er \
, så du kan udelade denne klausul, hvis du ikke har brug for at ændre denne.
Eksempel 1 – Grundlæggende brug
Her er et eksempel på, hvordan du bruger denne operator i en SELECT
erklæring:
SELECT 'Charlie' LIKE 'Char%';
Resultat:
+------------------------+ | 'Charlie' LIKE 'Char%' | +------------------------+ | 1 | +------------------------+
I dette tilfælde er returværdien 1
hvilket betyder, at inputstrengen matchede mønsteret. Især specificerede vi, at inputstrengen skulle starte med Char og slutte med hvad som helst. %
tegn matcher et vilkårligt antal tegn (inklusive nul tegn).
Her er, hvad der sker, hvis vi dropper %
:
SELECT 'Charlie' LIKE 'Char';
Resultat:
+-----------------------+ | 'Charlie' LIKE 'Char' | +-----------------------+ | 0 | +-----------------------+
Returresultatet er 0
hvilket betyder ingen match. Dette skyldes, at vi ikke brugte et jokertegn til at angive andre tegn.
Eksempel 2 – _
Jokertegn
Vi har også mulighed for at bruge _
jokertegn for kun at angive et enkelt tegn. Her er et eksempel:
SELECT 'Charlie' LIKE 'Ch_rlie';
Resultat:
+--------------------------+ | 'Charlie' LIKE 'Ch_rlie' | +--------------------------+ | 1 | +--------------------------+
De to jokertegn kan kombineres i et mønster, hvis det kræves:
SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Her er nogle flere:
SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1', 'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2', 'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3', 'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';
Resultat:
+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | +----------+----------+----------+----------+ | 1 | 1 | 1 | 1 | +----------+----------+----------+----------+
Lad os lave nogle ændringer i dette eksempel, så vi kan se nogle eksempler på, hvornår de ikke stemmer overens:
SELECT 'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1', 'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2', 'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3', 'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';
Resultat:
+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | +----------+----------+----------+----------+ | 0 | 0 | 0 | 0 | +----------+----------+----------+----------+
Eksempel 3 – Et databaseeksempel
LIKE
operator bruges ofte i en WHERE
klausul af en SELECT
sætning, når du forespørger i en database. Når det bruges på denne måde, indsnævrer det resultaterne til kun de poster, der matcher, men vi ser de faktiske resultater (ikke kun en 1
eller 0
).
Her er et eksempel på, hvordan vi kan bruge denne operator i en databaseforespørgsel:
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistName LIKE 'B%';
Resultat:
+----------+----------------+ | ArtistId | ArtistName | +----------+----------------+ | 4 | Buddy Rich | | 11 | Black Sabbath | | 15 | Birds of Tokyo | | 16 | Bodyjar | +----------+----------------+
I dette tilfælde var det en simpel forespørgsel, der returnerer alle kunstnere, hvis navne starter med bogstavet B .
Her er den fulde liste over kunstnere i tabellen:
SELECT ArtistId, ArtistName FROM Artists;
Resultat:
+----------+------------------------+ | ArtistId | ArtistName | +----------+------------------------+ | 1 | Iron Maiden | | 2 | AC/DC | | 3 | Allan Holdsworth | | 4 | Buddy Rich | | 5 | Devin Townsend | | 6 | Jim Reeves | | 7 | Tom Jones | | 8 | Maroon 5 | | 9 | The Script | | 10 | Lit | | 11 | Black Sabbath | | 12 | Michael Learns to Rock | | 13 | Carabao | | 14 | Karnivool | | 15 | Birds of Tokyo | | 16 | Bodyjar | +----------+------------------------+
Eksempel 4 – Undslippe med omvendt skråstreg
Hvad sker der, hvis et af jokertegnene er i din inputstreng, og du skal udføre et match mod det? Du kan undslippe det med omvendt skråstreg (\
). Her er et eksempel på en sådan søgning med og uden escape-tegnet:
SELECT 'usr_123' LIKE 'usr_123' AS 'Without escape', 'usr_123' LIKE 'usr\_123' AS 'With escape';
Resultat:
+----------------+-------------+ | Without escape | With escape | +----------------+-------------+ | 1 | 1 | +----------------+-------------+
I dette tilfælde matchede de begge, men af forskellige årsager. Den første linje matchede, fordi jokertegnet specificerede, at et hvilket som helst tegn vil matche. Den anden linje matchede også, men kun fordi inputstrengen tilfældigvis havde en understregning på det rigtige sted.
Lad os ændre inputstrengen lidt, så vi får et andet resultat:
SELECT 'usr+123' LIKE 'usr_123' AS 'Without escape', 'usr+123' LIKE 'usr\_123' AS 'With escape';
Resultat:
+----------------+-------------+ | Without escape | With escape | +----------------+-------------+ | 1 | 0 | +----------------+-------------+
Den uundgåede version returnerede positivt, fordi jokertegnet betød, at vi kunne have en hvilken som helst karakter på det sted. Den undslupne version sagde eksplicit, at kun understregningstegn (_
) vil matche. Indtastningsstrengen havde ikke et understregningstegn på det sted, og resultatet var derfor negativt.
Eksempel 5 – ESCAPE
Klausul
Du kan også bruge ESCAPE
klausul for at specificere dit eget tilpassede escape-karakter. Her er et eksempel:
SELECT 'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1', 'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';
Resultat:
+----------+----------+ | String 1 | String 2 | +----------+----------+ | 1 | 0 | +----------+----------+
Eksempel 6 – Numeriske udtryk
MySQL-implementeringen af LIKE
operatoren gør det muligt at bruge numeriske udtryk. Her er et eksempel:
SELECT 1234 LIKE '12%', 1234 LIKE '12_';
Resultat:
+-----------------+-----------------+ | 1234 LIKE '12%' | 1234 LIKE '12_' | +-----------------+-----------------+ | 1 | 0 | +-----------------+-----------------+