CHARINDEX (Transact-SQL)

搜尋 expression2 中的 expression1,並在找到時傳回它的開始位置。搜尋會在 start_location 開始。

主題連結圖示Transact-SQL 語法慣例

語法

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 不能搭配 text、ntext 和 image 資料類型使用。

如果 expression1 或 expression2 是 NULL,當資料庫相容性層級是 70 或以上時,CHARINDEX 會傳回 NULL。如果資料庫相容性層級是 65 或以下,只有在 expression1 和 expression2 都是 NULL 時,CHARINDEX 才會傳回 NULL。

如果在 expression2 內找不到 expression1,CHARINDEX 會傳回 0。

CHARINDEX 會以輸入的定序為基礎來執行比較。若要執行指定定序的比較,您可以利用 COLLATE,將明確定序套用至輸入上。

傳回的開始位置是以 1 為基準,而不是以 0 為基準。

範例

下列範例會傳回 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