Sök…


Syntax

  • Vildkort med%: VÄLJ * FRÅN [tabell] VAR [kolumnnamn] Gilla '% värde%'

    Vildkort med _: VÄLJ * FRÅN [tabell] VAR [kolumnnamn] Gillar 'V_n%'

    Vildkort med [charlist]: VÄLJ * FRÅN [tabell] VAR [kolumnnamn] Gilla 'V [abc] n%'

Anmärkningar

LIKE villkor i WHERE-klausulen används för att söka efter kolumnvärden som matchar det givna mönstret. Mönster bildas med följande två jokertecken

  • % (Procentuell symbol) - Används för att representera noll eller fler tecken
  • _ (Underscore) - Används för att representera en enda karaktär

Matcha öppet mönster

% Jokertecken som bifogas till början eller slutet (eller båda) av en sträng tillåter 0 eller fler av alla tecken före början eller efter slutet av mönstret att matcha.

Om du använder '%' i mitten kommer 0 eller fler tecken mellan de två delarna av mönstret att matcha.

Vi kommer att använda denna medarbetartabell:

Id fNAME LNAME Telefonnummer Administratörs DepartmentId Lön anst_datum
1 John Johnson 2468101214 1 1 400 23-03-2005
2 Sophie Amudsen 2479100211 1 1 400 11-01-2010
3 Ronny Smed 2462544026 2 1 600 2015/06/08
4 Jon Sanchez 2454124602 1 1 400 23-03-2005
5 Hilde Knag 2468021911 2 1 800 2000/01/01

Efter uttalande matchar alla poster med FName som innehåller strängen 'på' från medarbetartabellen.

SELECT * FROM Employees WHERE FName LIKE '%on%';
Id fNAME LNAME Telefonnummer Administratörs DepartmentId Lön anst_datum
3 R ny Smed 2462544026 2 1 600 2015/06/08
4 J Sanchez 2454124602 1 1 400 23-03-2005

Följande uttalande matchar alla poster som har PhoneNumber som börjar med strängen '246' från Anställda.

SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Id fNAME LNAME Telefonnummer Administratörs DepartmentId Lön anst_datum
1 John Johnson 246 8101214 1 1 400 23-03-2005
3 Ronny Smed 246 2544026 2 1 600 2015/06/08
5 Hilde Knag 246 8021911 2 1 800 2000/01/01

Följande uttalande matchar alla poster som har PhoneNumber som slutar med strängen '11' från Anställda.

SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Id fNAME LNAME Telefonnummer Administratörs DepartmentId Lön anst_datum
2 Sophie Amudsen 24791002 11 1 1 400 11-01-2010
5 Hilde Knag 24680219 11 2 1 800 2000/01/01

Alla poster där Fname 3rd karaktär är 'n' från Anställda.

SELECT * FROM Employees WHERE FName LIKE '__n%';

(två understreck används före 'n' för att hoppa över de första två tecknen)

Id fNAME LNAME Telefonnummer Administratörs DepartmentId Lön anst_datum
3 Ronny Smed 2462544026 2 1 600 2015/06/08
4 Jon Sanchez 2454124602 1 1 400 23-03-2005

Enstaka teckenmatch

För att bredda valet av ett strukturerat frågespråk (SQL-SELECT) -sats kan jokertecken, procenttecken (%) och understreck (_) användas.

Tecknet _ (understreck) kan användas som ett jokertecken för varje enskilt tecken i ett mönstermatch.

Hitta alla anställda vars Fname börjar med 'j' och slutar med 'n' och har exakt 3 tecken i Fname.

SELECT * FROM Employees WHERE FName LIKE 'j_n'

_ (understreck) karaktär kan också användas mer än en gång som ett jokertecken för att matcha mönster.

Till exempel skulle detta mönster matcha "jon", "jan", "jen", etc.

Dessa namn kommer inte att visas "jn", "john", "jordan", "justin", "jason", "julian", "jillian", "joann" eftersom i vår fråga används ett understreck och det kan hoppa exakt ett tecken, så resultatet måste ha 3 tecken Fname.

Till exempel skulle detta mönster matcha "LaSt", "LoSt", "HaLt", etc.

SELECT * FROM Employees WHERE FName LIKE '_A_T'

Matcha efter intervall eller uppsättning

Matcha varje enskilt tecken inom det angivna intervallet (t.ex.: [af] ) eller uppsättning (t.ex.: [abcdef] ).

Detta intervallmönster skulle matcha "gary" men inte "mary":

SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'

Detta setmönster skulle matcha "mary" men inte "gary":

SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'

Området eller uppsättningen kan också negeras genom att lägga till ^ caret före intervallet eller uppsättningen:

Detta område mönster skulle inte matcha "Gary" men kommer att matcha "Mary"

SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'

Denna uppsättning mönster skulle inte matcha "Mary" men kommer att matcha "Gary":

SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'

Matcha ALLA kontra ALLA

Matcha vilken som helst:
Måste matcha minst en sträng. I det här exemplet måste produkttypen vara antingen 'elektronik', 'böcker' eller 'video'.

SELECT *
FROM   purchase_table
WHERE  product_type LIKE ANY ('electronics', 'books', 'video');

Matcha alla (måste uppfylla alla krav).
I detta exempel måste både "Storbritannien" och "London" och "östra vägen" (inklusive variationer) matchas.

SELECT *
FROM   customer_table
WHERE  full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');

Negativt urval:
Använd ALLA för att utesluta alla objekt.
Detta exempel ger alla resultat där produkttypen inte är "elektronik" och inte "böcker" och inte "video".

SELECT *
FROM   customer_table
WHERE  product_type NOT LIKE ALL ('electronics', 'books', 'video');

Sök efter en rad tecken

Följande uttalande matchar alla poster som har FN-namn som börjar med ett brev från A till F från medarbetartabellen .

SELECT * FROM Employees WHERE FName LIKE '[A-F]%'

ESCAPE-uttalande i LIKE-frågan

Om du implementerar en textsökning som LIKE fråga gör du det vanligtvis så här:

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') 

Men (bortsett från det faktum att du inte nödvändigtvis bör använda LIKE när du kan använda fulltext-search) skapar detta ett problem när någon matar in text som "50%" eller "a_b".

Så (istället för att byta till fulltext-sökning) kan du lösa problemet med LIKE -scape-uttalandet:

SELECT * 
FROM T_Whatever 
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'

Det betyder \ kommer nu att behandlas som ESCAPE-karaktär. Detta betyder att du nu bara kan bero på \ till varje tecken i strängen du söker, och resultaten kommer att bli korrekta, även om användaren anger ett specialtecken som % eller _ .

t.ex

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);

Obs: Ovanstående algoritm är endast avsedd för demonstration. Det fungerar inte i de fall 1 grafeme består av flera tecken (utf-8). t.ex. string stringToSearch = "Les Mise\u0301rables"; Du måste göra detta för varje diagram, inte för varje tecken. Du bör inte använda ovanstående algoritm om du handlar med asiatiska / östasiatiska / sydasiatiska språk. Eller snarare, om du vill att rätt kod ska börja med bör du bara göra det för varje grafemexluster.

Se även ReverseString, en C # intervjufråga

Wildcard-tecken

jokertecken används med SQL LIKE-operatören. SQL-vildkort används för att söka efter data i en tabell.

Jokertecken i SQL är:%, _, [charlist], [^ charlist]

% - En ersättning för noll eller fler tecken

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

_ - En ersättning för en enda karaktär

Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';

[charlist] - Ställer in och intervall för tecken som ska matchas

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] - Matchar bara ett tecken som INTE specificeras inom parenteserna

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow