SQL
Gillar operatör
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 på ny | Smed | 2462544026 | 2 | 1 | 600 | 2015/06/08 |
4 | J på | 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 '_%';