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 '_%';


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow