CHARINDEX (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
此函式會在第二個字元運算式內搜尋一個字元運算式,並傳回第一個運算式的開始位置 (如果找到的話)。
語法
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
引數
expressionToFind
包含要尋找之順序的字元 expression。 expressionToFind 具有 8000 字元限制。
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。
如果在 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)
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
此範例會顯示 'This is a Test'
中字串 'Test'
的區分大小寫搜尋。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'This is a Test'
COLLATE Latin1_General_CS_AS);
結果集如下所示。
-----------
11
E. 執行不區分大小寫的搜尋
此範例會顯示 '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 支援