sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du en streng i en streng i SQL Server

I SQL Server kan du bruge T-SQL CHARINDEX() funktionen eller PATINDEX() funktion til at finde en streng i en anden streng. Her er et hurtigt overblik over hver funktion.

CHARINDEX()-funktionen

Denne funktion accepterer 3 argumenter; strengen for at finde, strengen for at søge og en valgfri startposition.

CHARINDEX() syntaks ser sådan ud:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Hvor expressionToFind er det udtryk, du vil finde i den anden streng, og expressionToSearch er den anden streng. Den valgfri start_placering kan bruges til at angive en position i expressionToSearch som du skal begynde at søge efter.

Bemærk, at kun positionen for den første forekomst returneres.

Eksempel

Her er et eksempel:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.');

Resultat:

1

I dette eksempel er det første argument Bob , hvilket betyder, at vi søger efter det andet argument for Bob . Resultatet er 1, fordi det er den position, hvor Bob vises først i det andet argument.

Du bemærker måske også, at Bob vises faktisk to gange i strengen, men kun positionen for det første match returneres.

Ingen match

Hvis det andet argument ikke indeholdt Bob resultatet ville have været 0 .

SELECT CHARINDEX('Kate', 'Bob likes beer. Bob also likes beef.');

Resultat:

0

Specificering af en startposition

Du kan angive en startposition for, hvor du skal begynde at søge. Dette betyder, at SQL Server vil springe enhver forekomst, der kommer før den startposition, over. Resultaterne rapporteres dog stadig baseret på dens position i strengen (ikke fra startpositionen).

Hvis dette lyder forvirrende, bør følgende eksempel hjælpe:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Resultat:

17

Så i dette eksempel begynder vi at søge på position 16 (som tilfældigvis er mellemrummet før den 2. Bob ). Resultatet er, at den første forekomst af Bob springes over, og den andens position returneres. Og vi kan se, at dens position er 17 tegn fra begyndelsen af ​​strengen (selvom det kun er ét tegn, hvorfra vi begyndte at søge).

Skabsfølsomhed

Du kan eksplicit udføre en søgning, der skelner mellem store og små bogstaver, ved at tilføje COLLATE-sætningen til din SELECT-sætning:

Stilling af store og små bogstaver

Her er en søgning, der skelner mellem store og små bogstaver:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);

Resultat:

0

Dette skelner mellem store og små bogstaver, fordi _CS står for Case-Sensitive.

Uafhængig af store og små bogstaver

Og her er en søgning uden store og små bogstaver:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);

Resultat:

11

Dette skelner mellem store og små bogstaver, fordi _CI står for Case-Insensitive.

PATINDEX()-funktionen

PATINDEX() funktion udfører et lignende job som CHARINDEX() . Du har som udgangspunkt et valg om, hvilken du vil bruge. Den største forskel ligger i syntaksen.

PATINDEX() funktions syntaks ser sådan ud:

PATINDEX ( '%pattern%' , expression )

Hvor mønster er et tegnudtryk, der indeholder den sekvens, der skal findes, og udtryk er det udtryk, der skal søges i (typisk en kolonne).

PATINDEX() accepterer jokertegn, men ikke en startposition. CHARINDEX() på den anden side accepterer en startposition, men ikke jokertegn.

Eksempler

Her er et eksempel:

SELECT PATINDEX('%eer%', 'Bob likes beer.');

Resultat:

12

Men her er, hvad der sker, når vi ikke inkluderer jokertegnene:

SELECT PATINDEX('eer', 'Bob likes beer.');

Resultat:

0

Her er et andet eksempel, hvor vi introducerer et andet jokertegn:

SELECT PATINDEX('%b_er%', 'Bob likes beer.');

Resultat:

11

I dette tilfælde er understregningen (_ ), som er et jokertegn for ethvert enkelt tegn.


  1. Køre 2 forespørgsler på samme tid på Oracle SQL Developer?

  2. Guide til designdatabase til afstemning og undersøgelse i MySQL

  3. Hvordan sikkerhedskopierer og gendanner man en database som en kopi på den samme server?

  4. Indsæt data i tabeller forbundet med fremmednøgle