LOCATE スカラー関数

LOCATE 関数は、ある引数が別の引数内に最初に現れた開始位置を戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするLOCATE( search-string, ソース文字列, start,CODEUNITS16CODEUNITS32OCTETS)

スキーマは SYSIBM です。

LOCATE 関数は、source-string 内の search-string の開始位置を戻します。 search-string が見つからず、いずれの引数も NULL でない場合、結果は 0 です。 search-string が見付かった場合、結果は 1 から source-string の実際の長さまでの数値になります。 search-string の長さがゼロの場合、 この関数によって戻される結果は 1 です。 オプションの start が指定されている場合、検索を開始する source-string 内の文字位置を示します。 ストリングの単位をオプションとして指定して、どの単位で この開始および関数の結果が表現されるかを示します。

検索文字列
検索対象のストリングを指定する式。 search-string が戻す値は、実際の長さが 4000 バイトを超えない、組み込みの文字ストリング・データ・タイプ、グラフィック・ストリング・データ・タイプ、またはバイナリー・ストリング・データ・タイプであることが必要です。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

ソース文字列
検索を行う対象のソース・ストリングを指定する式。 source-string が戻す値は、組み込みの文字ストリング・データ・タイプ、グラフィック・ストリング・データ・タイプ、またはバイナリー・ストリング・データ・タイプであることが必要です。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

開始
search-string 内で検索を開始する位置を指定する式。

start は指定したストリング単位で表され、ゼロ以上の整数値を戻す必要があります。

引数を、文字ストリングまたはグラフィック・ストリングのデータ・タイプにすることもできます。 ストリング入力は、暗黙的に DECFLOAT(34) の数値にキャストされ、その後 INTEGER 値に割り当てられます。

CODEUNITS16、CODEUNITS32、または OCTETS
start と戻される結果を表すのに使用するストリング長の 単位を指定します。 source-string がビット・データとして定義された文字ストリング の場合は、CODEUNITS16 および CODEUNITS32 は指定できません。 source-string がグラフィック・ストリングの場合は、OCTETS は指定できません。 source-string がバイナリー・ストリングの場合は、CODEUNITS16、CODEUNITS32、および OCTETS は指定できません。
CODEUNITS16
start と戻される結果が、16 ビットの UTF-16 コード単位の形で 表現されることを指定します。
CODEUNITS32
start と戻される結果が、32 ビットの UTF-32 コード単位の形で表現されるこ とを指定します。
OCTETS
start と戻される結果が、バイトの形で表現されることを指定します。

ストリング単位を明示的に指定しない場合、結果のデータ・タイプが、使用するストリング単位を決定します。 結果がグラフィック・データの場合 、start と戻される位置は 2 バイト単位で表されます。それ以外の場合には、バイト単位で表されます。

CODEUNITS16、 CODEUNITS32、OCTETSの詳細については、「文字列単位仕様」 を参照してください。

1 番目と 2 番目の引数は、互換性のあるストリング・タイプを持たなければなりません。 互換性に関する詳細については、「比較のための変換ルール」 を参照してください。

この関数の結果は長精度整数 (large integer) です。

結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。

類似の関数:
start が指定されている場合、LOCATE 関数は以下の POSITION 関数と類似しています。ここで、string-units は CODEUNITS16、CODEUNITS32、または OCTETS です。
   POSITION(search-string,
                 SUBSTRING(source-string, start, string-units)) + start - 1

start が指定されていない場合、検索は source-string の最初の位置から開始され、LOCATE 関数は以下の POSITION 関数に似ています。ここで、string-units は CODEUNITS16、CODEUNITS32、または OCTETS です。

   POSITION(search-string, source-string, string-units)

詳細は、 スカラー関数「POSITION」 を参照してください。

例 1:
ストリング 'DINING' 中に最初に現れる文字 'N' の位置を探す。
   SELECT LOCATE('N', 'DINING')
     FROM SYSIBM.SYSDUMMY1;
結果は値 3 になります。
例 2:
IN_TRAY という名前の表の中のすべての行について、RECEIVED 列と SUBJECT 列を選択し、NOTE_TEXT 列内のストリング 'GOOD' の開始位置を選択する。
   SELECT RECEIVED, SUBJECT, LOCATE('GOOD', NOTE_TEXT)
     FROM IN_TRAY
     WHERE LOCATE('GOOD', NOTE_TEXT) <> 0;
例 3:
ストリング 'Jürgen lives on Hegelstraße' 内の、文字 'ß' の位置を特定し、そのストリング内での位置を、CODEUNITS32 単位でホスト変数 LOCATION に設定する。
   SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,CODEUNITS32);
ホスト変数 LOCATION の値は 26 に設定されます。
例 4:
ストリング 'Jürgen lives on Hegelstraße' 内の、文字 'ß' の位置を特定し、そのストリング内での位置を、CODEUNITS16 単位でホスト変数 LOCATION に設定する。
   SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,CODEUNITS16);
ホスト変数 LOCATION の値は 26 に設定されます。
例 5:
ストリング 'Jürgen lives on Hegelstraße' 内の、文字 'ß' の位置を特定し、そのストリング内での位置を、OCTETS でホスト変数 LOCATION に設定する。
   SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,OCTETS);
ホスト変数 LOCATION の値は 27 に設定されます。