CHARINDEX (Transact-SQL)

在運算式中搜尋另一個運算式,並在找到時傳回它的開始位置。

主題連結圖示 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 字元序列在 AdventureWorks2012 資料庫之 Document 資料表 DocumentSummary 資料行中的起始位置。

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

以下為結果集:

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

B.從特定位置執行搜尋

下列範例會利用選擇性的 start_location 參數,在 AdventureWorks2012 資料庫之 DocumentSummary 資料行的第五個字元開始搜尋 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)

C.搜尋不存在的運算式

下列範例會顯示在 expressionToSearch 內找不到 expressionToFind 時的結果集。

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.執行區分大小寫的搜尋

下列範例會在 'This is a Test' 中,以區分大小寫的方式搜尋 'TEST' 字串。

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

以下為結果集:

-----------

0

下列範例會在 'Das ist ein Test' 中,以區分大小寫的方式搜尋 'Test' 字串。

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'This is a Test'
       COLLATE Latin1_General_CS_AS);

以下為結果集:

-----------

13

E.執行不區分大小寫的搜尋

下列範例會在 'Das ist ein Test' 中,以不區分大小寫的方式搜尋 'TEST' 字串。

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'This is a Test'
       COLLATE Latin1_General_CI_AS);
GO

以下為結果集:

-----------

13

請參閱

參考

字串函數 (Transact-SQL)

+ (字串串連) (Transact-SQL)

概念

定序與 Unicode 支援