カテゴリ:

文字列とバイナリ関数 (マッチング/比較)

CHARINDEX

2番目の引数で最初の引数が最初に出現する場所を検索し、成功した場合は、2番目の引数で最初の引数の位置(1ベース)を返します。

エイリアス

POSITION

構文

CHARINDEX( <expr1>, <expr2> [ , <start_pos> ] )

引数

必須:

式1

探している値を表す文字列またはバイナリ式です。

式2

検索する値を表す文字列またはバイナリ式です。

オプション:

開始位置

検索を開始する位置を示す番号です(1式2 の開始を表します)。

デフォルト: 1

使用上の注意

  • 引数が NULLの場合、 NULLを返します。

  • 文字列またはバイナリ値が見つからない場合、 0 を返します。

  • 指定されたオプションの 開始位置 が2番目の引数(検索対象の文字列)の末尾を超えている場合、 0 を返します。

  • 最初の引数が空の場合(空の文字列など)、 1 を返します。

  • 最初の2つの引数のデータ型は同じである必要があります。両方とも文字列にするか、両方ともバイナリ値にする必要があります。

照合の詳細

この関数は、次の照合仕様をサポートしません。

  • lower

  • upper

  • pi (句読点は区別しない)。

  • cs-ai (大文字と小文字は区別、アクセント記号は区別しない)。

「fuzzy wuzzy」で「uzzy」の最初の出現を見つけます。

SELECT CHARINDEX('uzzy', 'fuzzy wuzzy', 1);

+-------------------------------------+
| CHARINDEX('UZZY', 'FUZZY WUZZY', 1) |
|-------------------------------------|
|                                   2 |
+-------------------------------------+

前と同じ例ですが、位置5から開始するため、最初ではなく2番目の出現が見つかります。

SELECT CHARINDEX('uzzy', 'fuzzy wuzzy', 5);

+-------------------------------------+
| CHARINDEX('UZZY', 'FUZZY WUZZY', 5) |
|-------------------------------------|
|                                   8 |
+-------------------------------------+

文字列でUnicode文字を含むさまざまな文字を検索します。

SELECT n, h, CHARINDEX(n, h) FROM pos;

+--------+---------------------+-------------------+
| N      | H                   | CHARINDEX(N IN H) |
|--------+---------------------+-------------------|
|        |                     |                 1 |
|        | sth                 |                 1 |
| 43     | 41424344            |                 5 |
| a      | NULL                |              NULL |
| dog    | catalog             |                 0 |
| log    | catalog             |                 5 |
| lésine | le péché, la lésine |                14 |
| nicht  | Ich weiß nicht      |                10 |
| sth    |                     |                 0 |
| ☃c     | ☃a☃b☃c☃d            |                 5 |
| ☃☃     | bunch of ☃☃☃☃       |                10 |
| ❄c     | ❄a☃c❄c☃             |                 5 |
| NULL   | a                   |              NULL |
| NULL   | NULL                |              NULL |
+--------+---------------------+-------------------+

バイナリ値のバイトを検索します。以下の値は16進表記であるため、単一の BINARY バイトは2桁の16進数として表されます。

この例では、「EF」が3番目のバイトと一致するため、戻り値は3です(最初のバイトは「AB」、2番目のバイトは「CD」、3番目のバイトは「EF」)。

SELECT CHARINDEX(X'EF', X'ABCDEF');

+-------------------------------+
| CHARINDEX(X'EF' IN X'ABCDEF') |
|-------------------------------|
|                             3 |
+-------------------------------+

この例では、一致するものはありません。シーケンス「BC」は検索対象の値に含まれているように見えますが、「B」は最初のバイトの2番目のニブルであり、「C」は2番目のバイトの最初のニブルです。実際に「BC」を含むバイトはないため、戻り値は0(見つからない)です。

SELECT CHARINDEX(X'BC', X'ABCD');

+-----------------------------+
| CHARINDEX(X'BC' IN X'ABCD') |
|-----------------------------+
|                           0 |
+-----------------------------+