Delen via


CHARINDEX (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft Fabric

Met deze functie wordt gezocht naar één tekenexpressie binnen een tweede tekenexpressie, zodat de beginpositie van de eerste expressie wordt geretourneerd als deze wordt gevonden.

Transact-SQL syntaxisconventies

Syntaxis

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Arguments

expressionToFind

Een tekenexpressie die de reeks bevat die moet worden gevonden. expressionToFind heeft een limiet van 8000 tekens.

expressionToSearch

Een tekenexpressie om te zoeken.

start_location

Een geheel getal of een bigint-expressie waarmee de zoekopdracht wordt gestart. Als start_location niet is opgegeven, een negatieve waarde heeft of een nulwaarde (0) heeft, begint de zoekopdracht aan het begin van expressionToSearch.

Retourtypen

bigint als expressionToSearch een gegevenstype nvarchar(max), varbinary(max), of varchar(max) heeft; anders .

Opmerkingen

Als de expressieToFind of expressionToSearch een Unicode-gegevenstype (nchar of nvarchar) heeft en de andere expressie niet, converteert de CHARINDEX functie die andere expressie naar een Unicode-gegevenstype. CHARINDEX kan niet worden gebruikt met gegevenstypen voor afbeeldingen, ntext of tekst .

Als de expressieToFind of expressionToSearch-expressie een NULL waarde heeft, CHARINDEX retourneert NULLu .

Als CHARINDEXexpressieToFind niet wordt gevonden binnen expressionToSearch, CHARINDEX retourneert 0u .

CHARINDEX voert vergelijkingen uit op basis van de invoersortering. Als u een vergelijking in een opgegeven sortering wilt uitvoeren, gebruikt COLLATE u om een expliciete sortering toe te passen op de invoer.

De geretourneerde beginpositie is gebaseerd op 1, niet op basis van 0.

0x0000 (char(0)) is een niet-gedefinieerd teken in Windows-sorteringen en kan niet worden opgenomen in CHARINDEX.

Aanvullende tekens (surrogaatparen)

Bij het gebruik van sc-sorteringen (aanvullende tekens), zowel start_location als het aantal surrogaatparen als één teken, niet twee. Zie sortering en Unicode-ondersteuning voor meer informatie.

Voorbeelden

Eén. De beginpositie van een expressie retourneren

In dit voorbeeld wordt gezocht bicycle in de variabele @documentvoor de gezochte tekenreekswaarde.

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bicycle', @document);
GO

Dit is de resultatenset.

-----------
48

B. Zoeken vanaf een specifieke positie

In dit voorbeeld wordt de optionele parameter start_location gebruikt om de zoekopdracht vital te starten op het vijfde teken van de variabele @documentvoor de gezochte tekenreekswaarde.

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('vital', @document, 5);
GO

Dit is de resultatenset.

-----------
16

C. Zoeken naar een niet-bestaande expressie

In dit voorbeeld ziet u de resultatenset wanneer CHARINDEXexpressieToFind niet wordt gevonden in expressionToSearch.

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bike', @document);
GO

Dit is de resultatenset.

-----------
0

In dit voorbeeld ziet u een hoofdlettergevoelige zoekopdracht naar de tekenreeks TEST in de gezochte tekenreeks This is a Test.

USE tempdb;
GO

--perform a case sensitive search
SELECT CHARINDEX('TEST', 'This is a Test' COLLATE Latin1_General_CS_AS);

Dit is de resultatenset.

-----------
0

In dit voorbeeld ziet u een hoofdlettergevoelige zoekopdracht naar de tekenreeks Test in de gezochte tekenreeks This is a Test.

USE tempdb;
GO

SELECT CHARINDEX('Test', 'This is a Test' COLLATE Latin1_General_CS_AS);

Dit is de resultatenset.

-----------
11

In dit voorbeeld ziet u een niet-hoofdlettergevoelige zoekopdracht naar de tekenreeks TEST in een doorzochte tekenreeks This is a Test.

USE tempdb;
GO

SELECT CHARINDEX('TEST', 'This is a Test' COLLATE Latin1_General_CI_AS);
GO

Dit is de resultatenset.

-----------
11

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

F. Zoeken vanaf het begin van een tekenreeksexpressie

In dit voorbeeld wordt de eerste locatie van de tekenreeks in tekenreeks isThis is a stringgeretourneerd, beginnend vanaf positie 1 (het eerste teken) van This is a string.

SELECT CHARINDEX('is', 'This is a string');

Dit is de resultatenset.

---------
3

G. Zoeken vanaf een andere positie dan de eerste positie

In dit voorbeeld wordt de eerste locatie van de tekenreeks in tekenreeks isThis is a stringgeretourneerd, waarbij de zoekopdracht wordt gestart vanaf positie 4 (het vierde teken).

SELECT CHARINDEX('is', 'This is a string', 4);

Dit is de resultatenset.

---------
 6

H. Resultaten wanneer de tekenreeks niet wordt gevonden

In dit voorbeeld ziet u de retourwaarde wanneer CHARINDEX de tekenreeks niet wordt gevonden string_pattern in de gezochte tekenreeks.

SELECT TOP (1) CHARINDEX('at', 'This is a string')
FROM dbo.DimCustomer;

Dit is de resultatenset.

---------
0