sql >> Database teknologi >  >> RDS >> Mysql

Sådan fungerer LIKE-operatøren i MySQL

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 |
+-----------------+-----------------+

  1. Guide til designdatabase til afstemning og undersøgelse i MySQL

  2. Migrering af MySQL til PostgreSQL på AWS RDS, del 1

  3. ROLLBACK TRUNCATE i SQL Server

  4. Hvad er Javas JPA-teknologi?