共用方式為


字符索引 (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

此函式會在第二個字元運算式內搜尋一個字元運算式,並傳回第一個運算式的開始位置 (如果找到的話)。

Transact-SQL 語法慣例

語法

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

引數

expressionToFind

包含要尋找之順序的字元 expressionexpressionToFind 有 8,000 個字元的限制。

expressionToSearch

要搜尋的字元運算式。

start_location

搜尋開始的 integerbigint 運算式。 如果未指定 start_location 、具有負值或具有零 (0) 值,則搜尋會從 expressionToSearch 的開頭開始。

傳回類型

如果 expressionToSearch 具有 nvarchar(max)varbinary(max)varchar(max) 資料類型,則為 bigint;否則為 int

備註

如果 expressionToFindexpressionToSearch 運算式具有 Unicode 資料類型 (ncharnvarchar),而另一個運算式沒有, CHARINDEX 則函式會將該其他運算式轉換成 Unicode 資料類型。 CHARINDEX 無法與 imagentexttext 資料類型搭配使用。

如果 expressionToFindexpressionToSearch 運算式具有 NULL 值, CHARINDEX 則會傳回 NULL

如果在 CHARINDEX 內找不到 expressionToFindCHARINDEX會傳回 0

CHARINDEX 根據輸入對照執行比較。 若要在指定的定序中執行比較,請使用 將 COLLATE 明確定序套用至輸入。

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

0x0000char(0)) 是 Windows 定序中未定義的字元,無法包含在 CHARINDEX.

補充字元 (Surrogate 字組)

使用補充字元 (SC) 對照時, start_location 和傳回值都會將代理配對計為一個字元,而不是兩個字元。 如需詳細資訊,請參閱 定序和 Unicode 支援

範例

A. 傳回運算式的起始位置

此範例會在已搜尋字串值變數 bicycle 中搜尋 @document

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bicycle', @document);
GO

結果集如下所示。

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

B. 從特定位置搜尋

此範例會使用選擇性 start_location 參數,在已搜尋字串值變數 vital 的第五個字元開始搜尋 @document

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('vital', @document, 5);
GO

結果集如下所示。

-----------
16

C. 搜尋不存在的運算式

此範例顯示在 CHARINDEX 內找不到 expressionToFind的結果集。

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bike', @document);
GO

結果集如下所示。

-----------
0

此範例會顯示已搜尋字串 TEST 中字串 This is a Test 的區分大小寫搜尋。

USE tempdb;
GO

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

結果集如下所示。

-----------
0

此範例會顯示已搜尋字串 Test 中字串 This is a Test 的區分大小寫搜尋。

USE tempdb;
GO

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

結果集如下所示。

-----------
11

此範例顯示搜尋字串TEST中字串This is a Test的不區分大小寫的搜尋。

USE tempdb;
GO

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

結果集如下所示。

-----------
11

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

F. 從字串運算式的開頭搜尋

此範例會傳回 is 字串中 This is a string 字串的第一個位置,並且從 This is a string 的位置 1 (第一個字元) 開始進行。

SELECT CHARINDEX('is', 'This is a string');

結果集如下所示。

---------
3

G. 從第一個位置以外的位置搜尋

此範例會傳回 is 字串中 This is a string 字串的第一個位置,並從位置 4 開始搜尋。

SELECT CHARINDEX('is', 'This is a string', 4);

結果集如下所示。

---------
 6

H. 找不到字串時的結果

此範例顯示在搜尋字串中找不到字串CHARINDEX時的傳回值。

SELECT TOP (1) CHARINDEX('at', 'This is a string')
FROM dbo.DimCustomer;

結果集如下所示。

---------
0