Site Overlay

Bruger SQL Server CHARINDEX og PATINDEX

Hvis du har skrevet manyapplications så er du sikkert har kørt på tværs af situationer, hvor du har brug for toidentify hvis en bestemt karakter eller en række af tegn, der vises i en streng. Denne artikel vil jeg diskutere ved hjælp af CHARINDE.og PATINDE. funktioner til at søge tekst kolonner og tegnstrenge. Jeg vil vise dig, hvordan hver af dissefunktioner fungerer, og forklare forskellene mellem dem., Der er også nogle eksempler på, hvordan du kan overveje at bruge disse funktioner til at løse et antal forskellige karaktersøgningssituationer.charinde.og Patinde .functions bruges til at søge i en tegnstreng efter et tegn eller et sæt tegn. Hvis den tegnstreng, der søges, indeholder karakterernebeing søgt efter, returnerer disse funktioner en ikke-nul heltalværdi. Thisinteger værdi er startstedet for hvor tegnstrengen beingsearched for er placeret inden for strengen, der søges., Den PATINDEXfunction giver mulighed for at bruge jokertegn syntaks i det mønster, der søges til, mens CHARINDEX funktion understøtter ikke jokertegn søgninger. Lad osse på hver enkelt af disse funktioner lidt mere detaljeret.

Hvordan man bruger CHARINDEXFunction

CHARINDEX functionreturns udgangspunktet, af en karakter, eller en streng af tegn, withinanother tegnstreng., Den CHARINDEX funktion kaldes hjælp followingformat:

CHARINDEX( expression1 , udtryk2 )

Hvor expression1 isthe streng af tegn, der findes i udtryk2, og start_locationis den position, hvor den CHARINDEX funktion vil starte på udkig efter expression1in udtryk2.

CHARINDE. – funktionenvender et helt tal tilbage. Den returnerede heltalsværdi er den position, hvortegn, der søges efter, er placeret i strengen, der søges. Ifthe CHARINDE.ikke finde de tegn, du søger efter så thefunction returnerer en nul heltal værdi., Lad os sige, vi udfører followingCHARINDEX funktion opkald:

CHARINDEX('SQL', 'Microsoft SQL Server')

Denne funktion opkald vil returnthe start placering af tegnstreng “SQL”, i strengen “MicrosoftSQL Server”. I dette tilfælde returnerer CHARINDE. – funktionen nummer 11,som som du kan se er startpositionen for “S” i strengen “Microsoft s .lserver”.

Nu siger, at vi har denfølgende CHARINDEX Kommando:

CHARINDEX('7.0', 'Microsoft SQL Server 2000')

I dette eksempel theCHARINDEX funktion vil returnere nul, da tegnstreng “7.0” ikke blivefundet i strengen “Microsoft SQL Server 2000”., Lad gå gennem et par eksempler på, hvordan du muligvis kan bruge CHARINDE.-funktionen til at løse nogle faktiske t-s .l-problemer.

for det første eksempel sigedu vil kun vise efternavnet på kolonnen ContactName for de første 5 poster i Kundetabellen North .ind database. Her er de første 5optegnelser.

ContactName------------------------------ Maria AndersAna TrujilloAntonio MorenoThomas HardyChristina Berglund

som du kan se, Kundenavnindeholder både for-og efternavn på kunden, hvor første og efternavn er adskilt af et enkelt mellemrum. Jeg vil bruge CHARINDE. – funktionen til atidentificere placeringen af mellemrummet mellem de to navne., På denne måde kan vi bruge pladsen til at analysere kontaktnavnet, så vi kun kan vise den sidste del af kolonnen. Her er nogle T-s .l-kode, der kun viser det efternavn for de første 5 poster i North .ind Kundetabellen.

select top 5 substring(ContactName, charindex(' ',ContactName)+1 , len(ContactName)) as from Northwind.dbo.customers

Her er output fra thiscommand:

Last Name------------------------------ AndersTrujilloMorenoHardyBerglund

CHARINDEX funktion foundthe plads mellem Første og Sidste Navn, så substring funktion couldsplit den ContactName, således kun det Sidste Navn, der blev vist., Jeg tilføjede 1 til den integer-værdi, som CHARINDE.returnerede, så det viste efternavn startede ikke med et mellemrum.

for det andet eksempel sigdu vil tælle alle poster fra en tabel, hvor en given kolonne indeholder en bestemt tegnstreng. CHARINDE. – funktionen kunne bruges til at tilfredsstilledin anmodning. At tælle alle adresserne i North .ind.dbo.Customertable, hvor Adressen kolonne, der indeholder enten ordet ” Vej ” eller anabbreviation for road (‘Rd’), VÆLG din erklæring vil se ud som dette:

select count(*) from Northwind.dbo.Customers where CHARINDEX('Rd',Address) > 0 or CHARINDEX('Road',Address)> 1

Hvordan PATINDEX FunctionWork?,

PATINDE. – funktionen vender startpositionen for et tegn eller en streng af tegn inden for en anden streng eller udtryk. Som tidligere nævnt har PATINDE.yderligere funktionalitet over CHARINDE.. PATINDE.understøtter wildildcard tegn inthe søgning mønster streng. Dette gør PATINDE.værdifuld for at søge eftervariying streng mønstre. Den PATINDEX kommandoen tager følgende form:

PATINDEX( ‘%mønster%’ -, ytrings -)

Hvor “mønster” isthe tegnstreng, du søger efter, og udtryk er stringin, som du søger efter., Almindeligvis er udtrykket en kolonne i atable. Tegnet ” % ” er nødvendigt på forsiden og bagsiden af mønsteret, medmindre dusøger efter mønsteret i begyndelsen og/eller slutningen af udtrykket.

ligesom CHARINDE. – funktionen returnerer PATINDE. – funktionen startpositionen for mønsteret inden for strengen,der søges. Hvis du har et PATINDE. – funktionskald som sådan:

PATINDE. (‘%BC%’,’ABCD’)

, er resultatet af thepatinde. – funktionskald 2, hvilket er det samme som CHARINDE. – funktionen., %’Erne i ovenstående kommando fortæller PATINDE. – kommandoen for at finde placeringen af”BC” – strengen, hvor strengen muligvis har nul eller flere tegn foran, ellerefter “BC”. Tegnet % er et jokertegn.

Hvis du ønsker at afgøre, ifa streng, der begynder med et bestemt sæt af tegn, du ville forlade off de første% sign, og din PATINDEX opkald vil se ud som dette:

PATINDEX(‘AB%’,’ABCD’)

I dette tilfælde PATINDEXfunction giver 1, hvilket indikerer, at det mønster, ‘AB’ blev fundet i theexpression “ABCD”.,

nu med jokertegndu kan oprette en meget mere kompliceret mønster matchende situation så de simpleones jeg har vist dig hidtil. Sig, at du vil afgøre, om en tegnstrengindeholder bogstaverne A og Z, samt Ethvert numerisk tal. Så yourpatinde.funktion opkald kan se sådan ud.

PATINDE. (‘%%%%’,’,Y .abc123′)

Bemærk, at det mønster, Jeg leder efter i ovenstående eksempel, bruger en række wildildcard-referencer. Anmeldelser Serverl Server bøger Online for andre wildildcard syntaks information., Lad os gå througha par eksempler på, hvordan vi kan bruge PATINDE.kommando i conjunctionwithith en SELECT-sætning.

sig, at du vil finde alle de poster, der indeholder ordene “brød” eller “brød” i Beskrivelsestekstkolonne i nordvind.dbo.Kategorier tabel, så din select statement wouldouldlook sådan:

select Description from Northwind.dbo.Categories where patindex('%read%',description) > 0

Her brugte jeg wildildcarding tolook for enten en under-eller store bogstaver “B”., Når jeg køre denne SELECT-sætning againstmy Northwind database får jeg følgende Beskrivelse kolonner, der vises:

Description--------------------------------------------------------Desserts, candies, and sweet breadsBreads, crackers, pasta, and cereal

Her er en anden examplewhere jeg brugt nogle ekstra wildcard henvisninger til at finde nogle poster. Dette eksempel udelukker beskrivelsen, der har et ‘ e ‘ som det andet bogstav fra resultatet i ovenstående eksempel.

select Description from Northwind.dbo.Categories where patindex('%read%',description) > 0 and patindex('_%',description) = 1

Ved at tilføje et additionalpatinde. – funktionskald til statementhere-sætningen, der brugte ^ wildildcardsymbolet, var jeg i stand til at udelukke beskrivelsen “Dessert, slik og søde brød”., Ovenstående eksempel returnerede følgende enkelt beskrivelse.

Description--------------------------------------------------------Breads, crackers, pasta, and cereal 

Konklusion

Som du kan se CHARINDEXand den PATINDEX udføre lignende former for mønster søgninger inden for et characterstring. Funktionen PATINDE.giver wildildcard SPECIFIKATIONER, gør det muligt tobe brugt til meget forskellige slags mønster kampe, mens Charinde .function ikke. Afhængigt af hvad du skal gøre, er disse to funktionergreat hjælpe dig med at søge, manipulere og analysere tegnstrenge i s .lserver.

“se alle artikler af klummeskribent Gregory A. Larsen

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *