CHARINDEX (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Questa funzione esegue la ricerca dell'espressione di un carattere all'interno di una seconda espressione di caratteri, e restituisce la posizione iniziale della prima espressione, se trovata.

Convenzioni di sintassi Transact-SQL

Sintassi

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

expressionToFind
Espressione di caratteri contenente la sequenza da trovare. expressionToFind ha un limite di 8000 caratteri.

expressionToSearch
Espressione di caratteri da cercare.

start_location
Espressione integer o bigint in corrispondenza della quale inizia la ricerca. Se start_location viene omesso, è un numero negativo oppure è uguale a zero, la ricerca viene avviata all'inizio di expressionToSearch.

Tipi restituiti

bigint se expressionToSearch è del tipo di dati varchar(max), varbinary(max) o varchar(max). In caso contrario, int.

Osservazioni:

Se l'espressione expressionToFind o expressionToSearch ha un tipo di dati Unicode (nchar oppure nvarchar) e l'altra espressione non ha tale tipo di dati, la funzione CHARINDEX converte l'altra espressione in un tipo di dati Unicode. Non è possibile usare CHARINDEX con i tipi di dati image, ntext, o text.

Se l'espressione expressionToFind o expressionToSearch è NULL, CHARINDEX restituisce NULL.

Se CHARINDEX non trova expressionToFind in expressionToSearch, restituisce 0.

CHARINDEX esegue confronti in base alle regole di confronto dell'input. Per eseguire un confronto in base a regole di confronto specifiche, è possibile usare COLLATE per applicare regole di confronto esplicite all'input.

La posizione di inizio restituita è in base 1 e non in base 0.

0x0000 (char(0)) è un carattere non definito nelle regole di confronto di Windows e non può essere incluso in CHARINDEX.

Caratteri supplementari (coppie di surrogati)

Quando si usano le regole di confronto SC, start_location e il valore restituito conteggiano le coppie di surrogati come un carattere, non due. Per ulteriori informazioni, vedi Supporto per Unicode e regole di confronto.

Esempi

R. Restituzione della posizione iniziale di un'espressione

In questo esempio viene cercato l'elemento bicycle nella variabile di valore stringa ricercata @document.

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

Questo è il set di risultati.

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

B. Ricerca da una posizione specifica

Nell'esempio seguente viene usato il parametro facoltativo start_location per avviare la ricerca di vital in corrispondenza del quinto carattere della variabile di valore stringa ricercata @document.

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

Questo è il set di risultati.

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

C. Ricerca di un'espressione inesistente

Nell'esempio seguente viene illustrato il set di risultati ottenuto quando CHARINDEX non trova expressionToFind in expressionToSearch.

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

Questo è il set di risultati.

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

Nell'esempio seguente viene eseguita una ricerca con distinzione tra maiuscole e minuscole della stringa 'TEST' nella stringa 'This is a Test``'.

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

Questo è il set di risultati.

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

Nell'esempio seguente viene eseguita una ricerca con distinzione tra maiuscole e minuscole della stringa 'Test' in 'This is a Test'.

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

Questo è il set di risultati.

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

Nell'esempio seguente viene eseguita una ricerca senza distinzione tra maiuscole e minuscole della stringa 'TEST' in 'This is a Test'.

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

Questo è il set di risultati.

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

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

F. Ricerca dall'inizio di un'espressione stringa

Nell'esempio seguente viene restituita la prima posizione della stringa is nella stringa This is a string, a partire dalla posizione 1 (il primo carattere) di This is a string.

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

Questo è il set di risultati.

---------
3

G. Ricerca da una posizione diversa dalla prima posizione

Nell'esempio seguente viene restituita la prima posizione della stringa is nella stringa This is a string, a partire dalla posizione 4 (il quarto carattere).

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

Questo è il set di risultati.

---------
 6

H. Risultati quando la stringa non viene trovata

L'esempio seguente illustra il valore restituito quando CHARINDEX non trova la stringa string_pattern nella stringa cercata.

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

Questo è il set di risultati.

---------
0

Vedi anche

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
Funzioni per i valori stringa (Transact-SQL)
+ (concatenazione di stringhe) (Transact-SQL)
Regole di confronto e supporto Unicode