Site Overlay

ved Hjelp av SQL Server er CHARINDEX og PATINDEX

Hvis du har skrevet manyapplications så du sannsynligvis har kjørt over situasjoner der du trenger toidentify hvis en bestemt bokstav eller et sett av tegn vises i en streng. Inthis artikkelen vil jeg diskutere bruke CHARINDEX og PATINDEX funksjoner tosearch tekst, kolonner og tekststrenger. Jeg vil vise deg hvordan hver av thesefunctions operere, og forklare forskjeller mellom dem., Også gitt aresome eksempler på hvordan du kan vurdere å bruke disse funksjonene til å løse en numberof annen karakter søk situasjoner.

CHARINDEX og PATINDEXfunctions er brukt til å søke etter en tekststreng for et tegn eller sett ofcharacters. Hvis strengen som søkte inneholder charactersbeing søkte etter, så disse funksjonene returnerer en ikke-null heltall. Thisinteger verdi er startstedet hvor strengen beingsearched for ligger i den strengen som søkte., Den PATINDEXfunction gir mulighet for å bruke jokertegn syntaks i mønsteret blir søkt for, mens CHARINDEX funksjonen ikke støtter jokertegn søk. La’slook på hver og en av disse funksjonene i litt mer detalj.

Hvordan du bruker CHARINDEXFunction

CHARINDEX functionreturns startposisjonen for et tegn, eller en streng med tegn som withinanother tegnstreng., Den CHARINDEX funksjonen kalles opp ved hjelp av followingformat:

CHARINDEX( expression1 , expression2 )

Hvor expression1 isthe streng av tegn for å bli funnet i expression2, og start_locationis posisjonen hvor CHARINDEX funksjon vil begynne å lete etter expression1in expression2.

CHARINDEX functionreturns et heltall. Heltallsverdien som returneres, er en posisjon hvor thecharacters være søk etter er plassert i den strengen som søkte. Ifthe CHARINDEX ikke finne tegnene du søker etter, så thefunction returnerer en null heltall., La oss si vi utføre followingCHARINDEX funksjonen samtale:

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

Denne funksjonen samtale vil returnthe starter plassering av tekststrengen «SQL», i strengen «MicrosoftSQL Server». I dette tilfellet CHARINDEX funksjonen vil returnere nummer 11,som du kan se er startposisjonen for «S» i strengen «Microsoft SQLServer».

Nå sier at vi har thefollowing CHARINDEX Kommando:

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

I dette eksempelet theCHARINDEX funksjonen vil returnere null, siden den tekststrengen «7.0» ikke kan befound i strengen «Microsoft SQL Server 2000»., La gå gjennom et par ofexamples på hvordan du kan være i stand til å bruke CHARINDEX funksjon for å løse someactual T-SQL problemer.

For det første eksemplet sayyou ønsker å vise bare de siste navnet på ContactName kolonne, for thefirst 5 poster i Gastronor database Kunden bordet. Her er de første 5records.

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

Som du kan se, CustomerNamecontains både for-og etternavn av kunden, hvor første og etternavn er atskilt med et enkelt mellomrom. Jeg vil bruke CHARINDEX funksjon toidentify posisjon i rommet mellom de to navnene., På denne måten kan vi usedthe posisjon av plass til å analysere ContactName slik at vi kan vise bare thelast navn delen av kolonnen. Her er noen T-SQL-kode for å vise bare thelast navn for den første 5-poster i Gastronor Kunden bordet.

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

Her er resultatet fra thiscommand:

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

CHARINDEX funksjon foundthe mellomrom mellom for-og etternavn, slik at delstreng-funksjonen couldsplit den ContactName, derfor er det kun det Siste ble Navnet som vises., Jeg har lagt til 1 til theinteger verdi som CHARINDEX tilbake, så den Siste Navnet vises ikke startwith en plass.

For det andre eksemplet, sayyou ønsker å telle alle poster fra en tabell der en gitt kolonne inneholder aparticular tegnstreng. Den CHARINDEX funksjonen kan brukes til å satisfyyour forespørsel. Å telle alle Adressene i Gastronor.dbo.Customertable der Postadressen kolonnen inneholder enten ordet «Veien» eller anabbreviation for veien (‘Rd’), VELG din uttalelse ville se ut som dette:

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

Hvordan Gjør PATINDEX FunctionWork?,

PATINDEX functionreturns startposisjonen av en karakter eller en streng med tegn withinanother streng, eller et uttrykk. Som nevnt tidligere PATINDEX har ekstra funksjonalitet over CHARINDEX. PATINDEX støtter jokertegn i søke-mønster strengen. Dette gjør PATINDEX verdifulle for å søke forvarying string mønstre. Den PATINDEX kommandoen tar følgende form:

PATINDEX( ‘%mønster%’ , uttrykk )

Hvor «mønster» isthe tegnstreng du søker etter, og uttrykket er stringin som du søker., Vanlige uttrykket er en kolonne i atable. Den » % » – skiltet er nødvendig på forsiden og baksiden av mønster, med mindre youare å søke etter mønster i begynnelsen og/eller slutten av et uttrykk.

Som CHARINDEX funksjon,PATINDEX funksjonen returnerer startposisjon mønster i stringbeing søkte. Hvis du har en PATINDEX funksjonen samtale som dette:

PATINDEX(‘%BC%’,’ABCD’)

Så resultatet av thePATINDEX funksjonen anrop 2, som er det samme som CHARINDEX funksjon., Den%s’i kommandoen ovenfor forteller PATINDEX kommando for å finne posisjonen til»BC» streng der strengen kan ha null eller flere tegn foran, orafter «BC». Den % – tegnet er et jokertegn.

Hvis du ønsker å finne ut ifa strengen begynner med et bestemt sett av tegn som du ville legge igjen av den første% sign, og PATINDEX samtale ville se ut som dette:

PATINDEX(‘AB%’,’ABCD’)

I dette tilfellet PATINDEXfunction gir 1, som indikerer at mønsteret ‘AB’ ble funnet i theexpression ‘ABCD’.,

Nå med jokertegn charactersyou kan lage en mye mer komplisert mønster matchende situasjonen så simpleones jeg har vist dere så langt. Si at du ønsker å finne ut om en karakter stringcontains bokstavene A og Z, samt noen numeriske tall. Deretter yourPATINDEX funksjonen samtale kan se ut som dette.

PATINDEX(‘%%%%’,’XYZABC123′)

Merk at mønsteret jeg amlooking for i eksemplet ovenfor bruker en rekke jokertegn referanser. ReviewSQL Server Books Online for andre jokertegn syntaks informasjon., La oss gå througha par eksempler på hvordan vi kan bruke den PATINDEX kommando i conjunctionwith en SELECT-setning.

Si at du ønsker å finne alle ofthe poster som inneholder ordene «Brødet», eller «brød» i Beskrivelsen textcolumn i Gastronor.dbo.Kategorier tabellen, og deretter på select-setning wouldlook som dette:

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

Her har jeg brukt wildcarding tolook for enten lavere eller store bokstaver «b»., Når jeg kjører denne SELECT-setning againstmy Northwind database får jeg følgende Beskrivelse av kolonnene:

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

Her er en annen examplewhere jeg brukte noen ekstra jokertegn referanser å finne noen poster. Thisexample utelukker Beskrivelse som har en » e » som det andre brevet fra theresult sett i eksemplet ovenfor.

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

Ved å legge til en additionalPATINDEX funksjonen samtale til hvor uttalelse, som brukte ^ wildcardsymbol, jeg var i stand til å ekskludere «Dessert, godteri og søte brød»beskrivelse., I eksemplet ovenfor returnerte følgende single beskrivelse.

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

Konklusjon

Som du kan se CHARINDEXand den PATINDEX utføre lignende typer mønster søk i en characterstring. Den PATINDEX funksjonen gir jokertegn spesifikasjoner, slik at det tobe brukt for mye forskjellige typer mønster kamper, mens CHARINDEXfunction ikke. Avhengig av hva du trenger å gjøre, disse to funksjonene aregreat for å hjelpe deg søke, bearbeide og analysere tekststrenger i SQLServer.

Se Alle Artikler av Spaltist Gregory A. Larsen

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *