LOCATE スカラー関数
LOCATE 関数は、ある引数が別の引数内に最初に現れた開始位置を戻します。
スキーマは 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 - 1start が指定されていない場合、検索は source-string の最初の位置から開始され、LOCATE 関数は以下の POSITION 関数に似ています。ここで、string-units は CODEUNITS16、CODEUNITS32、または OCTETS です。
POSITION(search-string, source-string, string-units)詳細は、 スカラー関数「POSITION」 を参照してください。
例
- 例 1:
- ストリング 'DINING' 中に最初に現れる文字 'N' の位置を探す。
結果は値 3 になります。SELECT LOCATE('N', 'DINING') FROM SYSIBM.SYSDUMMY1; - 例 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 に設定する。
ホスト変数 LOCATION の値は 26 に設定されます。SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,CODEUNITS32); - 例 4:
- ストリング 'Jürgen lives on Hegelstraße' 内の、文字 'ß' の位置を特定し、そのストリング内での位置を、CODEUNITS16 単位でホスト変数 LOCATION に設定する。
ホスト変数 LOCATION の値は 26 に設定されます。SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,CODEUNITS16); - 例 5:
- ストリング 'Jürgen lives on Hegelstraße' 内の、文字 'ß' の位置を特定し、そのストリング内での位置を、OCTETS でホスト変数 LOCATION に設定する。
ホスト変数 LOCATION の値は 27 に設定されます。SET :LOCATION = LOCATE('ß','Jürgen lives on Hegelstraße',1,OCTETS);
