適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
此函式會在第二個字元運算式內搜尋一個字元運算式,並傳回第一個運算式的開始位置 (如果找到的話)。
語法
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
引數
expressionToFind
包含要尋找之順序的字元 expression。 expressionToFind 有 8,000 個字元的限制。
expressionToSearch
要搜尋的字元運算式。
start_location
搜尋開始的 integer 或 bigint 運算式。 如果未指定 start_location 、具有負值或具有零 (0) 值,則搜尋會從 expressionToSearch 的開頭開始。
傳回類型
如果 expressionToSearch 具有 nvarchar(max) 、varbinary(max) 或 varchar(max) 資料類型,則為 bigint;否則為 int。
備註
如果 expressionToFind 或 expressionToSearch 運算式具有 Unicode 資料類型 (nchar 或 nvarchar),而另一個運算式沒有, CHARINDEX 則函式會將該其他運算式轉換成 Unicode 資料類型。
CHARINDEX 無法與 image、 ntext 或 text 資料類型搭配使用。
如果 expressionToFind 或 expressionToSearch 運算式具有 NULL 值, CHARINDEX 則會傳回 NULL。
如果在 CHARINDEX 內找不到 expressionToFind,則CHARINDEX會傳回 0。
CHARINDEX 根據輸入對照執行比較。 若要在指定的定序中執行比較,請使用 將 COLLATE 明確定序套用至輸入。
傳回的開始位置是以 1 為基準,而不是以 0 為基準。
0x0000 (char(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
D. 執行區分大小寫的搜尋
此範例會顯示已搜尋字串 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
E. 執行不區分大小寫的搜尋
此範例顯示搜尋字串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