CHARINDEX (Transact-SQL)

適用範圍: 是SQL Server (所有支援的版本) 是Azure SQL Database 是Azure SQL 受控執行個體 是Azure Synapse Analytics 是平行處理資料倉儲

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

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

語法

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

expressionToFind
包含要尋找之順序的字元 expressionexpressionToFind 具有 8000 字元限制。

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。

如果在 expressionToSearch 內找不到 expressionToFind,則 CHARINDEX 會傳回 0。

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

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

0x0000 (char(0) ) 是 Windows 定序中未定義的字元,而且不得包含在 CHARINDEX 中。

補充字元 (Surrogate 字組)

使用 SC 定序時,start_location 和傳回值會將代理字組計算成一個字元,而不是兩個字元。 如需詳細資訊,請參閱 Collation and Unicode Support

範例

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

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

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

以下為結果集。

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

B. 從特定位置執行搜尋

此範例會使用選擇性 start_location 參數,在已搜尋字串值變數 @document 的第五個字元開始搜尋 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. 搜尋不存在的運算式

此範例會顯示 CHARINDEX 在 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)

此範例會顯示已搜尋字串 '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

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

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

以下為結果集。

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

此範例會顯示 'This is a Test' 中字串 '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. 從字串運算式的開頭搜尋

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

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

以下為結果集。

---------
3

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

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

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

以下為結果集。

---------
 6

H. 找不到字串時的結果

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

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

以下為結果集。

---------
0

另請參閱

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
字串函數 (Transact-SQL)
+ (字串串連) (Transact-SQL)
定序與 Unicode 支援