Zoeken…
Syntaxis
Jokerteken met%: SELECT * FROM [tabel] WAAR [kolomnaam] Zoals '% Value%'
Jokerteken met _: SELECT * VAN [tabel] WAAR [kolomnaam] Zoals 'V_n%'
Jokerteken met [charlist]: SELECT * FROM [table] WHERE [column_name] Like 'V [abc] n%'
Opmerkingen
LIKE-voorwaarde in de WHERE-component wordt gebruikt om te zoeken naar kolomwaarden die overeenkomen met het gegeven patroon. Patronen worden gevormd met behulp van de volgende twee jokertekens
- % (Percentagesymbool) - Gebruikt voor het vertegenwoordigen van nul of meer tekens
- _ (Onderstrepingsteken) - Wordt gebruikt voor het vertegenwoordigen van een enkel teken
Overeenkomen met open patroon
Met het %
jokerteken dat aan het begin of einde (of beide) van een tekenreeks is toegevoegd, kan 0 of meer tekens voor het begin of na het einde van het patroon overeenkomen.
Als u '%' in het midden gebruikt, kunnen 0 of meer tekens tussen de twee delen van het patroon overeenkomen.
We gaan deze tabel met werknemers gebruiken:
ID kaart | FName | lname | Telefoonnummer | BeheerderId | DepartmentId | Salaris | Huur datum |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Sophie | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | smid | 2462544026 | 2 | 1 | 600 | 2015/06/08 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Hilde | Knoest | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
De volgende instructies komen overeen voor alle records met FName die een string 'aan' bevatten uit de tabel met werknemers.
SELECT * FROM Employees WHERE FName LIKE '%on%';
ID kaart | FName | lname | Telefoonnummer | BeheerderId | DepartmentId | Salaris | Huur datum |
---|---|---|---|---|---|---|---|
3 | R on ny | smid | 2462544026 | 2 | 1 | 600 | 2015/06/08 |
4 | J aan | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
De volgende verklaring komt overeen met alle records met PhoneNumber beginnend met string '246' van Medewerkers.
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
ID kaart | FName | lname | Telefoonnummer | BeheerderId | DepartmentId | Salaris | Huur datum |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | smid | 246 2544026 | 2 | 1 | 600 | 2015/06/08 |
5 | Hilde | Knoest | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
De volgende instructie komt overeen met alle records met PhoneNumber die eindigen op string '11' van Medewerkers.
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
ID kaart | FName | lname | Telefoonnummer | BeheerderId | DepartmentId | Salaris | Huur datum |
---|---|---|---|---|---|---|---|
2 | Sophie | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Hilde | Knoest | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Alle records waarbij het derde teken van de naam 'n' is van de werknemers.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(twee onderstrepingstekens worden gebruikt vóór 'n' om de eerste 2 tekens over te slaan)
ID kaart | FName | lname | Telefoonnummer | BeheerderId | DepartmentId | Salaris | Huur datum |
---|---|---|---|---|---|---|---|
3 | Ronny | smid | 2462544026 | 2 | 1 | 600 | 2015/06/08 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Match van één karakter
Om de selecties van een gestructureerde querytaal (SQL-SELECT) -instructie te verbreden, kunnen jokertekens, het procentteken (%) en het onderstrepingsteken (_) worden gebruikt.
Het teken _
(onderstrepingsteken) kan worden gebruikt als jokerteken voor elk afzonderlijk teken in een patroonovereenkomst.
Zoek alle medewerkers waarvan de Fname begint met 'j' en eindigt met 'n' en exact 3 karakters heeft in Fname.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(onderstrepingsteken) teken kan ook meer dan eens worden gebruikt als jokerteken om patronen te matchen.
Dit patroon komt bijvoorbeeld overeen met "jon", "jan", "jen", enz.
Deze namen worden niet getoond "jn", "john", "jordan", "justin", "jason", "julian", "jillian", "joann" omdat in onze zoekopdracht één onderstrepingsteken wordt gebruikt en het precies kan overslaan één teken, dus het resultaat moet 3 tekens Fname zijn.
Dit patroon komt bijvoorbeeld overeen met "LaSt", "LoSt", "HaLt", enz.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Overeenkomen met bereik of set
Overeenkomen met een willekeurig teken binnen het opgegeven bereik (bijvoorbeeld: [af]
) of set (bijvoorbeeld: [abcdef]
).
Dit bereikpatroon komt overeen met "gary" maar niet met "mary":
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Dit ingestelde patroon komt overeen met "mary" maar niet met "gary":
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
Het bereik of de set kan ook worden genegeerd door de ^
caret toe te voegen vóór het bereik of de set:
Dit bereikpatroon komt niet overeen met "gary" maar wel met "mary":
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Dit ingestelde patroon komt niet overeen met "mary" maar wel met "gary":
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
Overeenkomen met ELK versus ALLEN
Overeenkomen met:
Moet overeenkomen met ten minste één string. In dit voorbeeld moet het producttype 'elektronica', 'boeken' of 'video' zijn.
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Overeenkomen met alle (moet aan alle vereisten voldoen).
In dit voorbeeld moeten zowel 'verenigd koninkrijk' als 'londen' en 'oostelijke weg' (inclusief variaties) op elkaar worden afgestemd.
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Negatieve selectie:
Gebruik ALL om alle items uit te sluiten.
Dit voorbeeld levert alle resultaten op waarbij het producttype geen 'elektronica' is en geen 'boeken' en geen 'video'.
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Zoeken naar een reeks tekens
De volgende instructie komt overeen met alle records met FName die begint met een letter van A tot F uit de tabel met werknemers .
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
ESCAPE-instructie in de LIKE-query
Als u een tekstzoekopdracht als LIKE
-query implementeert, doet u dit meestal zo:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
Echter (afgezien van het feit dat u niet noodzakelijkerwijs LIKE
zou moeten gebruiken wanneer u fulltext-search kunt gebruiken), creëert dit een probleem wanneer iemand tekst invoert zoals "50%" of "a_b".
Dus (in plaats van over te schakelen naar fulltext-search), kunt u dat probleem oplossen met de LIKE
-escape-instructie:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'
Dat betekent dat \
nu wordt behandeld als ESCAPE-teken. Dit betekent dat u nu gewoon \
voor elk teken in de tekenreeks die u doorzoekt kunt voorbereiden, en de resultaten beginnen correct te zijn, zelfs wanneer de gebruiker een speciaal teken zoals %
of _
.
bv
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"\" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Opmerking: het bovenstaande algoritme is alleen voor demonstratiedoeleinden. Het werkt niet in gevallen waarin 1 grapheme uit meerdere tekens bestaat (utf-8). bijv. string stringToSearch = "Les Mise\u0301rables";
Je moet dit voor elk grapheme doen, niet voor elk karakter. Gebruik het bovenstaande algoritme niet als u te maken hebt met Aziatische / Oost-Aziatische / Zuid-Aziatische talen. Of liever, als u om te beginnen de juiste code wilt, moet u dat gewoon voor elke graphemeCluster doen.
Zie ook ReverseString, een C # interview-vraag
Jokertekens
jokertekens worden gebruikt met de SQL LIKE-operator. SQL-jokertekens worden gebruikt om gegevens in een tabel te zoeken.
Jokertekens in SQL zijn:%, _, [charlist], [^ charlist]
% - Een vervanging voor nul of meer tekens
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ - Een vervanging voor een enkel teken
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] - Sets en reeksen tekens om overeen te komen
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] - Komt alleen overeen met een teken dat NIET tussen de haakjes staat
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';