CHARINDEX (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse 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 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
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 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
(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
Il set di risultati è il seguente.
-----------
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 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'
in '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
E. Esecuzione di una ricerca senza distinzione tra maiuscole e minuscole
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
Il set di risultati è il seguente.
-----------
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');
Il set di risultati è il seguente.
---------
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);
Il set di risultati è il seguente.
---------
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;
Il set di risultati è il seguente.
---------
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