Condividi tramite


CHARINDEX (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL 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 relative alla sintassi Transact-SQL

Sintassi

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Argomenti

expressionToFind

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

expressionToSearch

Espressione di caratteri da cercare.

start_location

Espressione integer o bigint in corrispondenza della quale inizia la ricerca. Se start_location non viene specificato, ha un valore negativo o ha un valore zero (0), la ricerca inizia 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 o nvarchar) e l'altra espressione non lo CHARINDEX converte in un tipo di dati Unicode. CHARINDEX non può essere usato con tipi di dati image, ntext o text .

Se l'espressione expressionToFind o expressionToSearch ha un NULL valore, CHARINDEX restituisce NULL.

Se CHARINDEX non trova expressionToFind all'interno di expressionToSearch, CHARINDEX restituisce 0.

CHARINDEX esegue confronti basati sulle regole di confronto di input. Per eseguire un confronto in regole di confronto specificate, utilizzare 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 regole di confronto carattere supplementare (SC), sia start_location che il valore restituito conteggiano coppie di surrogati come un carattere, non due. Per altre informazioni, vedere Regole di confronto e supporto Unicode.

Esempi

R. Restituire la posizione iniziale di un'espressione

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

DECLARE @document AS VARCHAR (64);

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

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

Il set di risultati è il seguente.

-----------
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 AS VARCHAR (64);

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

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

Il set di risultati è il seguente.

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

C. Cercare un'espressione inesistente

Questo esempio mostra il set di risultati quando CHARINDEX non trova expressionToFind all'interno di expressionToSearch.

DECLARE @document AS VARCHAR (64);

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

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

Il set di risultati è il seguente.

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

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);

Il set di risultati è il seguente.

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

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

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

Il set di risultati è il seguente.

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

In questo esempio viene illustrata una ricerca senza distinzione tra maiuscole e minuscole per la stringa nella stringa TESTThis is a Testdi ricerca.

USE tempdb;
GO

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

Il set di risultati è il seguente.

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

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

F. Eseguire la 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');

Il set di risultati è il seguente.

---------
3

G. Cercare 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);

Il set di risultati è il seguente.

---------
 6

H. Risultati quando la stringa non viene trovata

Questo esempio mostra 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;

Il set di risultati è il seguente.

---------
0