CHARINDEX (Transact-SQL)
搜尋 expression2 中的 expression1,並在找到時傳回它的開始位置。搜尋會在 start_location 開始。
語法
CHARINDEX ( expression1 ,expression2 [ , start_location ] )
引數
expression1
這是字元 expression,其中包含要尋找的順序。expression1 限制為 8000 個字元。expression2
這是要搜尋的字元運算式。start_location
這是搜尋開始的整數或 bigint 運算式。如果未指定 start_location,或者它是負數或 0,搜尋就會從 expression2 開頭開始。
傳回類型
如果 expression2 的資料類型是 varchar(max)、nvarchar(max) 或 varbinary(max) 則傳回 bigint,否則會傳回 int。
備註
如果 expression1 或 expression2 是 Unicode 資料類型 (nvarchar 或 nchar),但另一項不是,則另一項也會轉換成 Unicode 資料類型。CHARINDEX 不能搭配 image 資料類型使用。
如果 expression1 或 expression2 是 NULL,當資料庫相容性層級是 70 或以上時,CHARINDEX 會傳回 NULL。如果資料庫相容性層級是 65 或以下,只有在 expression1 和 expression2 都是 NULL 時,CHARINDEX 才會傳回 NULL。
如果在 expression2 內找不到 expression1,CHARINDEX 會傳回 0。
CHARINDEX 會以輸入的定序為基礎來執行比較。若要執行指定定序的比較,您可以利用 COLLATE,將明確定序套用至輸入上。
傳回的開始位置是以 1 為基準,而不是以 0 為基準。
0x0000 (char(0)) 是 Windows 定序中尚未定義的字元,且無法包含在 CHARINDEX 中。
範例
下列範例會傳回 bicycle 字元序列在 Document 資料表 DocumentSummary 資料行中的起始位置。
DECLARE @document varchar(64)
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.'
SELECT CHARINDEX('bicycle', @document)
GO
以下為結果集:
-----------
48
下列範例會利用選擇性的 start_location 參數,在 DocumentSummary 資料行第 5 字元開始搜尋 vital。
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)
下列範例會顯示在 expression2 內找不到 expression1 時的結果集。
DECLARE @document varchar(64)
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.'
SELECT CHARINDEX('bike', @document)
GO
以下為結果集:
-----------
0
(1 row(s) affected)
下列範例會在 'Das jst 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 jst ein Test' 中,以區分大小寫的方式搜尋 'Test' 字串。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS)
以下為結果集:
-----------
13
下列範例會在 'Das jst ein Test' 中,以不區分大小寫的方式搜尋 'TEST' 字串。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CI_AS)
GO
以下為結果集:
-----------
13