sql >> Databasteknik >  >> RDS >> Mysql

Hur LIKE-operatören fungerar i MySQL

I MySQL, LIKE operatorn utför mönstermatchning med ett SQL-mönster.

Om strängen matchar mönstret som tillhandahålls blir resultatet 1 , annars är det 0 .

Mönstret behöver inte nödvändigtvis vara en bokstavlig sträng. Denna funktion kan användas med stränguttryck och tabellkolumner.

Syntax

Syntaxen ser ut så här:

expr LIKE pat [ESCAPE 'escape_char']

Där expr är inmatningssträngen och pat är mönstret som du testar strängen mot.

Den valfria ESCAPE sats låter dig ange ett escape-tecken. Standardtecknet för escape är \ , så du kan utelämna den här klausulen om du inte behöver ändra den.

Exempel 1 – Grundläggande användning

Här är ett exempel på hur du använder den här operatorn i en SELECT uttalande:

SELECT 'Charlie' LIKE 'Char%';

Resultat:

+------------------------+
| 'Charlie' LIKE 'Char%' |
+------------------------+
|                      1 |
+------------------------+

I det här fallet är returvärdet 1 vilket betyder att inmatningssträngen matchade mönstret. Speciellt specificerade vi att inmatningssträngen skulle börja med Char och avsluta med vad som helst. % tecken matchar valfritt antal tecken (inklusive noll tecken).

Här är vad som händer om vi tappar % :

SELECT 'Charlie' LIKE 'Char';

Resultat:

+-----------------------+
| 'Charlie' LIKE 'Char' |
+-----------------------+
|                     0 |
+-----------------------+

Returresultatet är 0 vilket betyder ingen match. Detta beror på att vi inte använde ett jokertecken för att ange några andra tecken.

Exempel 2 – _ Jokertecken

Vi har också möjlighet att använda _ jokertecken för att endast ange ett enda tecken. Här är ett exempel:

SELECT 'Charlie' LIKE 'Ch_rlie';

Resultat:

+--------------------------+
| 'Charlie' LIKE 'Ch_rlie' |
+--------------------------+
|                        1 |
+--------------------------+

De två jokertecken kan kombineras i ett mönster om det behövs:

SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Här är några fler:

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

Låt oss göra några ändringar i det exemplet så att vi kan se några exempel på när de inte matchar:

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

Exempel 3 – Ett databasexempel

LIKE operatorn används ofta inom en WHERE sats av en SELECT uttalande när du frågar efter en databas. När den används på det här sättet, begränsar den resultaten till endast de poster som matchar, men vi ser de faktiska resultaten (inte bara en 1 eller 0 ).

Här är ett exempel på hur vi kan använda den här operatorn i en databasfråga:

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 det här fallet var det en enkel fråga som returnerar alla artister vars namn börjar med bokstaven B .

Här är hela listan över artister 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                |
+----------+------------------------+

Exempel 4 – Att fly med bakåtstrecket

Vad händer om ett av jokertecken finns i din inmatningssträng och du behöver göra en matchning mot den? Du kan undvika det med omvänt snedstreck (\ ). Här är ett exempel på en sådan sökning med och utan escape-tecknet:

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 det här fallet matchade de båda, men av olika anledningar. Den första raden matchade eftersom jokertecknet angav att vilket tecken som helst kommer att matcha. Den andra raden matchade också, men bara för att inmatningssträngen råkade ha ett understreck på rätt plats.

Låt oss ändra inmatningssträngen något så att vi får ett annat 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 oförkomna versionen returnerade positivt, eftersom jokertecknet innebar att vi kunde ha vilken karaktär som helst på den platsen. Den undanröjda versionen angav uttryckligen att endast understrecket (_ ) kommer att matcha. Inmatningssträngen hade inget understreck på den platsen och resultatet blev därför negativt.

Exempel 5 – ESCAPE Klausul

Du kan också använda ESCAPE klausul för att specificera din egen anpassade escape-karaktär. Här är ett exempel:

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

Exempel 6 – Numeriska uttryck

MySQL-implementeringen av LIKE operatorn tillåter att numeriska uttryck används. Här är ett exempel:

SELECT 
  1234 LIKE '12%',
  1234 LIKE '12_';

Resultat:

+-----------------+-----------------+
| 1234 LIKE '12%' | 1234 LIKE '12_' |
+-----------------+-----------------+
|               1 |               0 |
+-----------------+-----------------+

  1. Hur timeofday() fungerar i PostgreSQL

  2. PostgreSQL-servern stängdes inte av på Lion (Mac OS 10.7)

  3. PostgreSQL:Frågan har ingen destination för resultatdata

  4. Överträdelse av integritetsbegränsning:1452 Kan inte lägga till eller uppdatera en underordnad rad: