i den här artikeln kommer vi att lära oss hur man använder SQL LIKE operator, i SQL Server, med hjälp av reguljära uttryck för att hitta och/eller manipulera text. Vi börjar med att lära oss symbolerna och grundläggande syntax för att använda jokertecken reguljära uttryck. Vi kommer att använda teckenuppsättningar och repetitionsuttryck för att skapa flexibla matchningsmönster, och längs vägen kommer vi att undersöka olika sätt att använda samma operatör. Och slutligen, i den senare delen av avsnittet, kommer vi att utforska några av de vanligaste och mest användbara exemplen på reguljära uttryck.
SQL är det vanligaste språket för att arbeta med databaser. När du utformar en rapport eller använder BI eller något rapporteringsverktyg bygger programvaran nästan säkert en SQL-fråga bakom kulisserna som körs i databasen och returnerar dina valda data. När vi letar efter specifika data eller data som passar specifika kriterier, ger where-klausulen den verktygsuppsättning du behöver. Detta ger ett alternativ att fråga specifika rader som vi letar efter istället för hela tabellen.
Pre-requisites
ladda ner AdventureWorks2014-databasen här för att testa följande T-SQL-prover.
komma igång
Låt oss gå igenom SQL-satserna med hjälp av Liknande Nyckelord och jokertecken. Så låt oss börja lära oss om SQL LIKE operator.
använda SQL som jokertecken exempel
reguljära uttryck är mönster för att beskriva hur man matchar strängar i en where-klausul. Många programmeringsspråk stöder reguljära uttryck som använder något annorlunda syntax än vad som används med samma operatör. I den här artikeln, när vi hänvisar till reguljära uttryck, hänvisar vi till de mönster som används med SQL LIKE operator
Följande tabell innehåller de fyra olika jokertecken. Du kan också hänvisa till artikeln SQL string functions for Data Munging (Wrangling) för fler exempel.
jokertecken |
|
varje sträng med noll eller flera tecken i sökmönstret |
varje enskild teckensökning med det angivna mönstret |
varje enskild Teckensökning inom det angivna intervallet |
|
varje enskild teckensökning inte inom det angivna intervallet |
använda SQL som med ’%’ jokertecken
följande SQL-sats returnerar alla rader i persontabellen där deras efternamn börjar med bokstaven A. Låt oss ange bokstaven ’A’ , det första tecknet som måste vara i strängen och använd sedan jokertecknet ’%’, procenten.
välj topp 10 *
från person.Person
där förnamn som ’ a%’;
|
du ser utmatningen som listar topp 10 rader i persontabellen där förnamnet börjar med A och resten av tecknet är okänt.
använda SQL som med ’_’ jokertecken
jokertecknet, understrykning, är för att matcha ett enda tecken. Följande SQL-sats hittar alla telefonnummer som har ett riktnummer som börjar med 7 och slutar på 8 i kolumnen telefonnummer. Vi har också inkluderat % jokertecken i slutet av sökmönstret eftersom vi inte bryr oss om resten av strängvärdena.
välj p.förnamn,
p.efternamn,
telefonnummer
från person.Persontelefon som ph
inre gå Person.Person som p på ph. BusinessEntityID = p.BusinessEntityID
där Ph. PhoneNumber som ’ 7_8% ’
ordning efter P. efternamn;
|
utmatningen visar att riktnumret för det börjar med 7 och slutar med 8 listas.
använda SQL som med jokertecken
hakparenteser t.ex.tillåter oss att identifiera flera enskilda tecken som skulle vara i den specifika positionen. Låt oss till exempel säga att lista alla rader där förnamn tredje tecken börjar med I eller K. Istället för att skriva flera liknande förhållanden kan vi placera mönstermatchningsuppsättningen i den tredje positionen och stänga den på torget. Frågemotorn letar först efter ’ I ’och letar sedan efter’K’.
låt oss utföra följande SQL-sats
1
2
3
4
5
6
7
|
välj p.förnamn,
p.Efternamn,
telefonnummer
från Person.Persontelefon som ph
inre gå Person.Person som p på ph.BusinessEntityID = p.BusinessEntityID
där ph.PhoneNumber som ’7_8%’ och p.lastname som ’ba%’
Beställ efter p.LastName;
|
ovanstående fråga kan återges-skriven med eller villkor. Det är mer som en eller tillstånd.
1
2
3
4
5
6
7
|
välj p.förnamn,
p.efternamn,
telefonnummer
från personen.Persontelefon som ph
inre gå Person.Person som p på ph. BusinessEntityID = p.BusinessEntityID
där ph.PhoneNumber som ’7_8%’ och (p.efternamn som ’Bai%’ eller p.efternamn som ’Bak%’)
ordning efter P.efternamn;
|
i utgången kan vi se att efternamn där det tredje tecknet är ’I’ eller ’k’ listas
använda SQL som med ’^’ jokertecken
följande SQL-sats visar alla rader som inte har bokstaven som börjar med A till d i det första tecknet i deras efternamn. För att den platsen tilde karaktär i den första positionen av mönstret. Det blir inte förutsättningarna.
välj p.förnamn,
p.efternamn
från personen.Person p
där efternamn som ’ % ’
ordning efter p. efternamn;
|
Nu, om jag kör ovanstående fråga, ser vi att alla namn som kommer tillbaka inte har A, B, C eller D som deras första tecken.
använda SQL inte som med jokertecken
följande SQL-sats hittar alla personer där kolumnen förnamn har mer än 3 tecken.
välj distinkt
förnamn
från personen.Person
där förnamn inte gillar ”;
|
utdatalistan endast de namn där längden på Förnamnet är mer än 3
använda SQL som med Escape-klausulen
i följande SQL-sats används Escape-klausulen för att undkomma tecknet”!’för att negera betydelsen av’ % ’för att hitta strängen’ 100% Fri ’ i kolumnen col1 i temp-tabellen.
1
2
3
4
5
6
7
8
9
10
11
12
|
DROP TABLE IF EXISTS temp;
CREATE TABLE temp(col1 VARCHAR(100));
GO
INSERT INTO temp
VALUES(’ApexSQL Refactor is 100% Free SQL Formatter tool’), (’ApexSQL Job is 10-15% off today only’);
gå
välj *
från TEMP;
välj *
från temp
där col1 gillar ’ %100!% Fri% ’ fly ’!’;
gå
|
utdatalistan endast de värden där sökmönstret ’100% gratis’ matchar col1-uttrycket.
använda SQL som med fallet uttalande
följande SQL-sats drar ut alla anställda som har ett telefonnummer formaterat som tre-tre-fyra siffror med streck mellan (999-999-9999). Mönstret jämförs sedan med telefonnummerkolumnen för att härleda de inhemska eller internationella kategorierna.
falluttrycket utvärderas för det specifika mönstret för att härleda telefonkategoritypen.
välj p.förnamn,
p.efternamn,
telefonnummer,
fall när pH.telefonnummer som ’–’ sedan ’inhemskt telefonnummer’
annars ’internationellt telefonnummer’
Indien telefonnummer
från personen.Persontelefon som ph
inre gå Person.Person som p på ph. BusinessEntityID = p.BusinessEntityID
Beställ efter P.efternamn;
|
i utgången kan vi se att numret klassificeras som inhemskt eller internationellt. Kolumnen telefonnummer utvärderas med den liknande operatören med hjälp av kvadratkonsolen. Siffran noll till nio i den första teckenpositionen utvärderas för att matcha mönstret noll till nio, vilket tal som helst från noll till nio i den andra teckenpositionen och tredje och sedan den fjärde teckenpositionen måste vara ett streck och liknande logik tillämpas på resten av tecknen.
använda SQL som med dynamisk SQL
följande SQL-sats returnerar alla anställda där efternamnet matchar mönstret Barb. Mönstret skapas dynamiskt och jämförs mot uttrycket.
anger @elastname varchar(20)= ’Barb’;
välj p.förnamn,
p.efternamn,
den.Stad
från personen.Person p
gå med i personen.Adress på p. BusinessEntityID = ’s. AddressID
där p. efternamn som’ %’ + @ELastName+’%’;
|
utmatningslistan matchande rader för det angivna mönstret Barb
Obs: som standard sprutar char efterföljande ämnen beroende på fältets längd. Använd RTRIM för att undertrycka de bakre ämnena, om du använder datatypen char.
i följande SQL-sats är fältet @eLastName av rödingdatatyp. Du kan se en användning av rtrim funktion för att trimma de avslutande ämnena.
anger @elastname char(20)= ’Barb’;
välj p.förnamn,
p.efternamn,
den.Stad
från personen.Person p
gå med i personen.Adress på p. BusinessEntityID = ’s. AddressID
där p. efternamn som’ %’ + RTRIM (@ELastName)+’%’;
|
använda SQL som med en IF-sats
följande SQL-sats utvärderas inmatningsvärdet för det specifika mönstret i villkorsklausulen med IF-sats.
deklarera @rulename nvarchar(Max)= ’SQL Sever 2019 CTP är tillgänglig för förhandsgranskning’;
om @RuleName som ’ SQL Sever % CTP är tillgänglig för förhandsgranskning ’
Skriv ut ’giltig ingång bra!’;
annars
Skriv ut ’ inte ett giltigt bra!’;
|
inmatningssträngen utvärderas för specifika mönster med SQL som jokertecken och returnerar giltig inmatningssträng.
det är allt för nu!
sammanfattning
hittills har vi diskuterat olika tips och fyra olika jokertecken ( % ,_, och ^] som är tillgängliga med SQL LIKE operator. Det är en bra sökteknik för att matcha teckensträng med de angivna mönstren eller där vi inte är helt säkra på vad du söker aka fuzzy search. De tillgängliga jokertecken gör liknande operatör mer flexibel. Jag hoppas att du gillade den här artikeln på SQL LIKE operator i SQL Server. Ställ gärna några frågor i kommentarerna nedan.
- författare
- Senaste inlägg
min specialitet ligger i att designa & implementera lösningar med hög tillgänglighet och plattformsoberoende DB Migration. De tekniker som för närvarande arbetar med är SQL Server, PowerShell, Oracle och MongoDB.
Visa alla inlägg av Prashanth Jayaram
- en snabb översikt över databasrevision i SQL – 28 januari 2021
- så här ställer du in up Azure Data Sync mellan Azure SQL-databaser och lokal SQL Server – 20 januari 2021
- så här utför du Azure SQL database import/export – operationer med PowerShell-14 januari 2021