CHARINDEX (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Mit dieser Funktion können Sie in einem Zeichenausdruck nach einem anderen Zeichenausdruck suchen. Bei erfolgreicher Suche wird die Startposition des gesuchten Ausdrucks zurückgegeben.

Transact-SQL-Syntaxkonventionen

Syntax

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

expressionToFind
Ein Zeichenausdruck (Expressions (Ausdrücke)), der die zu suchende Sequenz enthält. Die maximale Zeichenlänge von expressionToFind beträgt 8000 Zeichen.

expressionToSearch
Der zu suchende Zeichenausdruck.

start_location
Ein integer- oder bigint-Ausdruck, bei dem die Suche beginnt. Wenn start_location nicht angegeben ist, einen negativen Wert oder den Wert 0 (null) besitzt, wird mit der Suche am Anfang von expressionToSearch begonnen.

Rückgabetypen

bigint, wenn expressionToSearch vom Datentyp nvarchar(max) , varbinary(max) oder varchar(max) ist; andernfalls int.

Bemerkungen

Wenn entweder der Ausdruck expressionToFind oder der Ausdruck expressionToSearch einen Unicode-Datentyp aufweist (nchar oder nvarchar), und der andere Ausdruck nicht, konvertiert die CHARINDEX-Funktion diesen anderen Ausdruck in einen Unicode-Datentyp. CHARINDEX kann nicht mit den Datentypen image, ntext oder text verwendet werden.

Wenn entweder der Ausdruck expressionToFind oder der Ausdruck expressionToSearch einen NULL-Wert aufweist, gibt auch CHARINDEX NULL zurück.

Wenn expressionToFind innerhalb von expressionToSearch von CHARINDEX nicht gefunden werden kann, gibt CHARINDEX 0 (null) zurück.

CHARINDEX führt Vergleiche basierend auf der Sortierung der Eingabe aus. Verwenden Sie zum Ausführen eines Vergleichs in einer angegebenen Sortierung COLLATE, um eine ausdrückliche Sortierung auf die Eingabe anzuwenden.

Die zurückgegebene Startposition ist 1-basiert, nicht 0-basiert.

0x0000 (char(0) ) ist ein nicht definiertes Zeichen in Windows-Sortierungen und kann nicht in CHARINDEX enthalten sein.

Ergänzende Zeichen (Ersatzpaare)

Bei Verwendung von SC-Sortierungen werden Ersatzzeichenpaare sowohl von start_location als auch vom Rückgabewert als ein anstelle von zwei Zeichen gezählt. Weitere Informationen finden Sie unter Collation and Unicode Support.

Beispiele

A. Zurückgeben der Startposition eines Ausdrucks

In diesem Beispiel wird in der Variablen des gesuchten Zeichenfolgenwerts @document nach bicycle gesucht.

DECLARE @document VARCHAR(64);  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bicycle', @document);  
GO  

Hier ist das Resultset.

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

B. Suchen ab einer bestimmten Position

In diesem Beispiel wird der optionale start_location-Parameter verwendet, um die Suche nach vital beim fünften Zeichen der Variable des gesuchten Zeichenfolgenwerts @document zu beginnen.

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('vital', @document, 5);  
GO  

Hier ist das Resultset.

-----------   
16            
  
(1 row(s) affected)  

C. Suchen nach einem nicht vorhandenen Ausdruck

In diesem Beispiel wird das Resultset dargestellt, wenn expressionToFind von CHARINDEX nicht in expressionToSearch gefunden werden kann.

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bike', @document);  
GO  

Hier ist das Resultset.

-----------
0
  
(1 row(s) affected)

In diesem Beispiel wird eine Suche nach der Zeichenfolge 'TEST' in der gesuchten Zeichenfolge 'This is a Test``' dargestellt, wobei die Groß-/Kleinschreibung berücksichtigt wird.

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

Hier ist das Resultset.

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

In diesem Beispiel wird eine Suche nach der Zeichenfolge 'Test' in 'This is a Test' dargestellt, wobei die Groß-/Kleinschreibung berücksichtigt wird.

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

Hier ist das Resultset.

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

In diesem Beispiel wird eine Suche nach der Zeichenfolge 'TEST' in 'This is a Test' dargestellt, wobei die Groß-/Kleinschreibung nicht berücksichtigt wird.

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

Hier ist das Resultset.

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

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

F. Suche ab dem Beginn eines Zeichenfolgenausdrucks

Dieses Beispiel gibt den ersten Speicherort der Zeichenfolge is in der Zeichenfolge This is a string ab Position 1 (also ab dem ersten Zeichen) von This is a string zurück.

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

Hier ist das Resultset.

---------
3

G. Suchen ab einer anderen Position als der ersten

Dieses Beispiel gibt den ersten Speicherort der Zeichenfolge is in der Zeichenfolge This is a string ab Position 4 (also ab dem vierten Zeichen) zurück.

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

Hier ist das Resultset.

---------
 6

H. Ergebnisse, wenn die Zeichenfolge nicht gefunden wird

Dieses Beispiel zeigt den Rückgabewert, wenn die Zeichenfolge string_pattern von CHARINDEX nicht in der gesuchten Zeichenfolge gefunden wird.

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

Hier ist das Resultset.

---------
0

Weitere Informationen

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
Zeichenfolgenfunktionen (Transact-SQL)
+ (Verketten von Zeichenfolgen) (Transact-SQL)
Collation and Unicode Support