Share via


CHARINDEX (Transact-SQL)

別の式から式を検索し、見つかった場合は開始位置を返します。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

引数

  • expressionToFind
    検索対象であるシーケンスを含む文字を指定します。 expressionToFind の上限は 8,000 文字です。

  • expressionToSearch
    検索する文字式です。

  • start_location
    検索が開始される integer 型または bigint 型の式を指定します。 start_location を指定しない場合、または負の値や 0 を指定した場合は、expressionToSearch の先頭から検索が開始されます。

戻り値の型

expressionToSearch のデータ型が varchar(max)、nvarchar(max)、または varbinary(max) の場合は bigint になります。それ以外の場合は int になります。

説明

expressionToFind または expressionToSearch のいずれかが Unicode データ型 (nvarchar または nchar) で、もう一方がこの型でない場合、もう一方も Unicode データ型に変換されます。 CHARINDEX を text、ntext、および image データ型と共に使用することはできません。

expressionToFind または expressionToSearch が NULL の場合、CHARINDEX は NULL を返します。

expressionToSearch から expressionToFind を検出できない場合、CHARINDEX は 0 を返します。

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

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

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

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

SC の照合順序を使用する場合、start_location と戻り値では、サロゲート ペアが 2 文字ではなく 1 文字としてカウントされます。 詳細については、「照合順序と Unicode のサポート」を参照してください。

使用例

A. 式の開始位置を返す

次の例は、Document テーブルの DocumentSummary 列で bicycle という文字シーケンスが開始する位置を返します。

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

以下に結果セットを示します。

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

B. 特定の位置から検索する

次の例では、オプションの start_location パラメーターを使用して、DocumentSummary 列の 5 文字目から vital の検索を開始します。

USE AdventureWorks2012;
GO
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. 存在しない式を検索する

次の例では、expressionToSearch から expressionToFind が検出できない場合の結果セットを示します。

USE AdventureWorks2012;
GO
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. 大文字小文字を区別する検索を実行する

次の例では、大文字と小文字を区別して、'Das ist ein Test' に含まれる文字列 'TEST' を検索します。

USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

以下に結果セットを示します。

-----------

0

次の例では、大文字と小文字を区別して、'Das ist ein Test' に含まれる文字列 'Test' を検索します。

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

以下に結果セットを示します。

-----------

13

E. 大文字小文字を区別しない検索を実行する

次の例では、大文字と小文字を区別せずに、'Das ist ein Test' に含まれる文字列 'TEST' を検索します。

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

以下に結果セットを示します。

-----------

13

関連項目

参照

文字列関数 (Transact-SQL)

+ (文字列連結) (Transact-SQL)

概念

照合順序と Unicode のサポート