CHARINDEX (Transact-SQL)
在運算式中搜尋另一個運算式,並在找到時傳回它的開始位置。
語法
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
引數
expressionToFind
這是字元運算式,其中包含要尋找的順序。 expressionToFind 的限制為 8000 個字元。expressionToSearch
這是要搜尋的字元運算式。start_location
這是搜尋開始的 integer 或 bigint 運算式。 如果未指定 start_location,或者它是負數或 0,搜尋就會從 expressionToSearch 開頭開始。
傳回類型
如果 expressionToSearch 的資料類型是 varchar(max)、nvarchar(max) 或 varbinary(max),則傳回 bigint,否則傳回 int。
備註
如果 expressionToFind 或 expressionToSearch 是 Unicode 資料類型 (nvarchar 或 nchar),但另一項不是,則另一項也會轉換成 Unicode 資料類型。 CHARINDEX 不能用於 text、ntext 和 image 資料類型。
如果 expressionToFind 或 expressionToSearch 是 NULL,CHARINDEX 會傳回 NULL。
如果在 expressionToSearch 內找不到 expressionToFind,CHARINDEX 會傳回 0。
CHARINDEX 會以輸入的定序為基礎來執行比較。 若要執行指定定序的比較,您可以利用 COLLATE,將明確的定序套用至輸入上。
傳回的開始位置是以 1 為基準,而不是以 0 為基準。
0x0000 (char(0)) 是 Windows 定序中未定義的字元,而且不得包含在 CHARINDEX 中。
增補字元 (Surrogate 字組)
使用 SC 定序時,start_location 和傳回值會將 Surrogate 字組計算成一個字元,而不是兩個字元。 如需詳細資訊,請參閱<定序與 Unicode 支援>。
範例
A.傳回運算式的開始位置
下列範例會傳回 bicycle 字元序列在 Document 資料表 DocumentSummary 資料行中的起始位置。
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
以下為結果集:
-----------
48
B.從特定位置執行搜尋
下列範例會利用選擇性的 start_location 參數,在 DocumentSummary 資料行的第五個字元開始搜尋 vital。
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
以下為結果集:
-----------
16
(1 row(s) affected)
C.搜尋不存在的運算式
下列範例會顯示在 expressionToSearch 內找不到 expressionToFind 時的結果集。
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
以下為結果集:
-----------
0
(1 row(s) affected)
D.執行區分大小寫的搜尋
下列範例會在 'Das ist ein Test' 中,以區分大小寫的方式搜尋 'TEST' 字串。
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
以下為結果集:
-----------
0
下列範例會在 'Das ist ein Test' 中,以區分大小寫的方式搜尋 'Test' 字串。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
以下為結果集:
-----------
13
E.執行不區分大小寫的搜尋
下列範例會在 'Das ist ein Test' 中,以不區分大小寫的方式搜尋 'TEST' 字串。
USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CI_AS)
GO
以下為結果集:
-----------
13