TOP

SQL-Lecția 5. Wildcards și expresii regulate (LIKE)

Adesea, pentru a filtra datele, va trebui să eșantionăm nu după potrivirea exactă a condiției, ci după o valoare aproximativă. Adică atunci când, de exemplu, căutăm un produs al cărui nume se potrivește cu un anumit model (expresie obișnuită) sau conține anumite simboluri sau cuvinte. În astfel de scopuri, există un operator LIKE în SQL, care caută valori aproximative. Pentru a construi un astfel de model se folosesc metacaractere (caractere speciale, pentru căutarea unei părți a valorii), și anume: „semnul procentual” (%) sau asterisc (*), „sublinierea” (_) sau „semnul de întrebare” (?) , „paranteze pătrate” ([ ]).


1. Semn procentual metacaracter (%) sau asterisc (*)

Să selectăm, de exemplu, înregistrări din tabelul nostru care se referă numai la produse care conțin cuvântul Skis în numele lor. Pentru a face acest lucru, vom crea un șablon potrivit:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

După cum puteți vedea, DBMS a selectat doar acele înregistrări în care coloana Produs conținea produse care conțineau cuvântul Skis.

Acest exemplu folosește metacaracterul asterisc (*) deoarece MS Access nu acceptă „semnul de procente” (%) pentru operatorul LIKE.

2. Metacaracter subliniere (_) sau semn de întrebare (?)

Un caracter de subliniere sau un semn de întrebare este folosit pentru a înlocui un singur caracter dintr-un cuvânt. Să înlocuim toate vocalele din cuvântul Bikes cu un „semn de întrebare” (?) și să vedem rezultatul:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Am folosit metacaracterul „semn de întrebare” (?) deoarece MS Access nu acceptă „sublinierea” (_) pentru operatorul LIKE.

3. Paranteze pătrate metacaracter ([ ])

Metacaracterul paranteze pătrate ([ ]) este folosit pentru a specifica simultan un set de caractere în care să căutați.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

În exemplul de mai sus, am selectat înregistrări în care numele orașelor încep cu litera T sau N în câmpul City.

Metacaracterul paranteze pătrate ([ ]) nu este acceptat în dialectul MySQL.

De asemenea, în acest caz, putem folosi un alt metacaracter care face opusul. Să adăugăm un semn de exclamare (!) la expresia noastră regulată, care va însemna „nu este egal” (pentru MS Access) sau un semn de putere (^) (pentru alte DBMS).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

Adică, ultima interogare creată de noi va fi citită astfel: selectați toate coloanele din tabelul Sumproduct și numai acele înregistrări în care numele orașului din câmpul City nu încep cu literele T sau N. În plus, remarcăm că set de litere din metacaracterul „paranteze pătrate” corespunde doar unei poziții în text.

Putem obține un rezultat similar dacă folosim operatorul NOT pe care îl cunoaștem deja, dar cu un semn de exclamare (!) înregistrarea va fi mai scurtă.