次の方法で共有


CHARINDEX (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

この関数は、2 番目の文字式内の 1 つの文字式を検索して、見つかった場合には最初の式の開始位置を返します。

Transact-SQL 構文表記規則

構文

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

引数

expressionToFind

検索するシーケンスを含む文字expressionToFind には 8,000 文字の制限があります。

expressionToSearch

検索する文字式。

start_location

検索が開始される integer 型または bigint 型の式。 start_locationが指定されていない場合、負の値を持つ場合、またはゼロ (0) の値を持つ場合、検索は expressionToSearch の先頭から開始されます。

戻り値の型

expressionToSearchvarchar(max)nvarchar(max) 、または varbinary(max) データ型の場合は bigint、それ以外の場合は int

解説

expressionToFind 式または expressionToSearch 式に Unicode データ型 (nchar または nvarchar) があり、それ以外の式が含まれていない場合、CHARINDEX関数はその他の式を Unicode データ型に変換します。 CHARINDEX は、画像ntext、またはテキストのデータ型では使用できません。

expressionToFind 式または expressionToSearch 式にNULL値がある場合、CHARINDEXNULLを返します。

expressionToSearchCHARINDEXexpressionToFind が見つからない場合、CHARINDEX0を返します。

CHARINDEX は、入力照合順序に基づいて比較を実行します。 指定した照合順序で比較を実行するには、 COLLATE を使用して明示的な照合順序を入力に適用します。

開始位置は 0 ではなく 1 を基準とします。

0x0000 (char(0)) は Windows 照合順序では未定義の文字であり、 CHARINDEXに含めることはできません。

補助文字 (サロゲート ペア)

補助文字 (SC) 照合順序を使用する場合、 start_location と戻り値の両方のサロゲート ペアは 2 文字ではなく 1 文字としてカウントされます。 詳細については、「 照合順序と 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 の 5 文字目で @document の検索を開始します。

DECLARE @document AS VARCHAR (64);

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

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

結果セットは次のとおりです。

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

C: 存在しない式を検索する

この例では、expressionToSearchCHARINDEXexpressionToFind が見つからない場合の結果セットを示します。

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

この例では、検索文字列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. 文字列式の先頭から検索する

この例では、is の位置 1 (最初の文字) から開始して、文字列 This is a string に含まれる文字列 This is a string の最初の位置を返します。

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

結果セットは次のとおりです。

---------
3

G. 最初の位置以外の位置から検索する

この例では、位置 4 (4 番目の文字) から開始して、文字列 is に含まれる文字列 This is a string の最初の位置を返します。

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