Condividi tramite


CHARINDEX (Transact-SQL)

Consente di cercare in un'espressione un'altra espressione e restituisce la posizione iniziale se la trova.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

Argomenti

  • expressionToFind
    Espressione di caratteri che contiene la sequenza da cercare. expressionToFind ha un limite di 8000 caratteri.

  • expressionToSearch
    Espressione di caratteri da cercare.

  • start_location
    Valore integer o espressione bigint in cui 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 è di tipo varchar(max), nvarchar(max) o varbinary(max). In caso contrario, è di tipo int.

Osservazioni

Se solo a una delle due espressioni expressionToFind e expressionToSearch è associato un tipo di dati Unicode (nvarchar o nchar), l'altra espressione viene convertita in un tipo di dati Unicode. Non è possibile utilizzare CHARINDEX con i tipi di dati text, ntext e image.

Se expressionToFind o expressionToSearch è NULL, CHARINDEX restituisce NULL.

Se l'espressione expressionToFind non viene individuata in expressionToSearch, CHARINDEX 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 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 utilizzano le regole di confronto SC, le coppie di surrogati vengono considerate da start_location e dal valore restituito come un solo carattere, non due. Per ulteriori informazioni, vedere Regole di confronto e supporto Unicode.

Esempi

A.Restituzione della posizione iniziale di un'espressione

Nell'esempio seguente viene restituita la posizione in corrispondenza della quale inizia la sequenza di caratteri bicycle nella colonna DocumentSummary della tabella Document.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

Set di risultati:

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

B.Ricerca da una posizione specifica

Nell'esempio seguente viene utilizzato il parametro facoltativo start_location per avviare la ricerca di vital dal quinto carattere della colonna DocumentSummary.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

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 l'espressione expressionToFind non viene individuata in expressionToSearch.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

Set di risultati:

-----------

0

(1 row(s) affected)

D.Esecuzione di una ricerca con distinzione tra maiuscole e minuscole

Nell'esempio seguente viene eseguita una ricerca con distinzione tra maiuscole e minuscole per la stringa 'TEST' in 'Das ist ein Test'.

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

Set di risultati:

-----------

0

Nell'esempio seguente viene eseguita una ricerca con distinzione tra maiuscole e minuscole per la stringa 'Test' in 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

Set di risultati:

-----------

13

E.Esecuzione di una ricerca senza distinzione tra maiuscole e minuscole

Nell'esempio seguente viene eseguita una ricerca senza distinzione tra maiuscole e minuscole per la stringa 'TEST' in 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

Set di risultati:

-----------

13

Vedere anche

Riferimento

Funzioni per i valori stringa (Transact-SQL)

+ (concatenazione di stringhe) (Transact-SQL)

Concetti

Regole di confronto e supporto Unicode