- カテゴリ:
文字列とバイナリ関数 (マッチング/比較)
POSITION¶
2番目の引数で最初の引数が最初に出現する場所を検索し、成功した場合は、2番目の引数で最初の引数の位置(1ベース)を返します。
1番目以降に出現する場所(例えば3番目に出現する場所)を見つける必要がある場合は、 REGEXP_INSTR 関数を使用できます。
- エイリアス:
-
CHARINDEX 関数は、 POSITION がサポートする構文バリエーションの1つをサポートしないことに注意してください。
構文¶
POSITION( <expr1>, <expr2> [ , <start_pos> ] ) POSITION( <expr1> IN <expr2> ) 引数¶
必須:
expr1検索する値を表す文字列またはバイナリ式。
expr2検索する値を表す文字列またはバイナリ式。
オプション:
start_pos検索を開始する位置を示す番号(
1はexpr2の開始を表します)。デフォルト:
1
戻り値¶
この関数は NUMBER型の値を返します。
いずれかの引数が NULL の場合、関数は NULL を返します。
使用上の注意¶
文字列またはバイナリ値が見つからない場合、関数は
0を返します。指定されたオプションの
start_posが2番目の引数(検索する文字列)の末尾を超えている場合、関数は0を返します。最初の引数が空の場合(空の文字列など)、関数は
1を返します。最初の2つの引数のデータ型は同じである必要があります(2つの文字列または2つのバイナリ値)。
照合順序の詳細¶
この関数は、次の照合仕様をサポートしません。
pi(句読点は区別しない)。cs-ai(大文字と小文字は区別、アクセント記号は区別しない)。
例¶
以下の例では、 POSITION 関数を使用しています。
VARCHAR 式¶
「banana」で「an」の初出を見つけます。
SELECT POSITION('an', 'banana', 1); +-----------------------------+ | POSITION('AN', 'BANANA', 1) | |-----------------------------| | 2 | +-----------------------------+ 位置3以降の「banana」で「an」の初出を見つけます。この検索では、「an」の2番目の出現が見つかります。
SELECT POSITION('an', 'banana', 3); +-----------------------------+ | POSITION('AN', 'BANANA', 3) | |-----------------------------| | 4 | +-----------------------------+ 文字列でUnicode文字を含むさまざまな文字を検索します。
SELECT n, h, POSITION(n IN h) FROM pos; +--------+---------------------+------------------+ | N | H | POSITION(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 | +--------+---------------------+------------------+ BINARY 式¶
以下の値は16進表記であるため、単一の BINARY バイトは2桁の16進数として表されます。
この例では、「EF」が3番目のバイトと一致するため、戻り値は 3 です(最初のバイトは「AB」、2番目のバイトは「CD」、3番目のバイトは「EF」です)。
SELECT POSITION(X'EF', X'ABCDEF'); +----------------------------+ | POSITION(X'EF', X'ABCDEF') | |----------------------------| | 3 | +----------------------------+ この例では、一致するものはありません。シーケンス「BC」は検索対象の値に含まれているように見えますが、「B」は最初のバイトの2番目のニブルであり、「C」は2番目のバイトの最初のニブルです。実際に「BC」を含むバイトはないため、返される値は 0 です(見つかりません)。
SELECT POSITION(X'BC', X'ABCD'); +--------------------------+ | POSITION(X'BC', X'ABCD') | |--------------------------| | 0 | +--------------------------+