SQL Serverでは、T-SQL CHARINDEX()
を使用できます。 別の文字式内の文字式の開始位置を見つける関数。
両方の文字式を引数として指定します。オプションの引数を指定して、検索を開始する位置を指定することもできます。
構文
構文は次のようになります:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
expressionToFindの場所 は他の文字列で検索する式であり、 expressionToSearch もう1つの文字列です。オプションのstart_location expressionToSearch内の位置を指定するために使用できます 検索を開始する対象。
最初に出現した位置のみが返されることに注意してください。
例
次に例を示します:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.') AS Result;
結果:
+----------+ | Result | |----------| | 1 | +----------+
この例では、最初の引数はBob
です。 、これは、2番目の引数でBob
を検索していることを意味します 。 Bob
の位置であるため、結果は1になります。 最初は2番目の引数に表示されます。
Bob
にも気付くかもしれません 実際には文字列に2回表示されますが、最初に一致した位置のみが返されます。
一致なし
2番目の引数にBob
が含まれていなかった場合 結果は0
になります 。
SELECT CHARINDEX('Bob', 'Kate likes beer. Kate also likes beef.') AS Result;
結果:
+----------+ | Result | |----------| | 0 | +----------+
開始位置の指定
(オプションで)検索の開始位置を指定できます。これは、SQLServerがその開始位置の前にあるすべてのオカレンスをスキップすることを意味します。ただし、結果は、選択した開始位置からではなく、文字列全体内の位置に基づいて報告されます。
デモンストレーションの例を次に示します。
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16) AS Result;
結果:
+----------+ | Result | |----------| | 17 | +----------+
この例では、位置16(2番目のBob
の前のスペース)から検索を開始します。 )。その結果、Bob
が最初に出現します。 はスキップされ、2番目の位置が返されます。また、その位置は文字列の先頭から17文字であることがわかります(検索を開始した場所から1文字だけですが)。
大文字と小文字の区別
COLLATE
を追加することにより、大文字と小文字を区別する検索を明示的に実行できます。 SELECT
の句 ステートメント:
大文字と小文字を区別する検索と大文字と小文字を区別しない検索を含む例を次に示します。
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive', CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive';
結果:
+------------------+--------------------+ | Case-Sensitive | Case-Insensitive | |------------------+--------------------| | 0 | 11 | +------------------+--------------------+
_CS
であるため、最初のものは大文字と小文字が区別されます (照合で)大文字と小文字を区別することを表します。 2つ目は、_CI
であるため、大文字と小文字は区別されません。 大文字と小文字を区別しないことを表します。