変更の始まり

LOCATE_IN_STRING

LOCATE_IN_STRING 関数は、あるストリング (source-string、ソース・ストリングと呼ばれる) の中の、別のストリング (search-string、検索ストリングと呼ばれる) の開始位置を戻します。 検索ストリング が見つからず、どちらの引数も NULL でない場合、結果はゼロになります。検索ストリング が見つかった場合、結果は 1 から ソース・ストリング の実際の長さまでの数値になります。オプションの start が指定されている場合、それは、source-string 中での検索が開始される文字位置を示します。

構文図を読む構文図をスキップする
>>-LOCATE_IN_STRING--(--source-string--,--search-string--------->

>--+---------------------------+--)----------------------------><
   '-,--start--+-------------+-'      
               '-,--instance-'        

オプションの start が指定されている場合、それは、source-string 中での検索が開始される文字位置を示します。 start を指定した場合、オプションの instance 番号も指定できます。 インスタンス 引数を使用して、source-string 内での search-string の特定のオカレンスが決定されます。それぞれの固有インスタンスには、前のインスタンスのいずれの文字も使用できますが、前のインスタンスのすべての文字を指定することはできません。

search-string の長さが 0 の場合、関数によって戻される結果は 1 です。source-string の長さが 0 の場合、関数によって戻される結果は 0 です。 そのどちらでもない場合で、search-string 値が、source-string 値の中に隣接して位置する同じ長さのサブストリングと等しい場合、関数によって戻される結果は、source-string 値内のその最初のサブストリングの開始位置になります。その他の場合、関数によって戻される結果は 0 です。

source-string
検索を行う相手先のソース・ストリングを指定する式。 ソース・ストリング には、任意の組み込み数値、日時、またはストリング式を指定できます。数値引数または日時引数は、 関数を評価する前に文字ストリングにキャストされます。数値および日時から文字ストリングへの変換について詳しくは、VARCHAR を参照してください。
search-string
検索するオブジェクトのストリングを指定する式。検索ストリング には、任意の組み込み数値、日時、またはストリング式を指定できます。これは、ソース・ストリング と互換性のあるものでなければなりません。 数値引数または日時引数は、 関数を評価する前に文字ストリングにキャストされます。数値および日時から文字ストリングへの変換について詳しくは、VARCHAR を参照してください。
start
検索が開始される source-string 内の位置を指定する式。 start には、任意の組み込み数値、文字ストリング、またはグラフィック・ストリング式を指定できます。 値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。

この整数の値が 0 より大きい場合、検索は start の位置から開始され、ストリングの末尾にいたるまで各位置で実行されます。 この整数の値が 0 より小さい場合、検索は CHARACTER_LENGTH(source-string) + start + 1 の位置から開始され、ストリングの先頭にいたるまで、各位置で実行されます。

開始桁 を指定しない場合、この関数は次と同じになります。

  POSITION( source-string , search-string )

start が 0 の場合は、エラーが戻されます。

instance
source-string の中の検索する search-string のインスタンスを指定する式。式は、組み込み数値、文字ストリング、またはグラフィック・ストリングのいずれかのデータ・タイプの値を戻す必要があります。値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。instance を指定しない場合、デフォルトは 1 です。この整数の値は 1 以上である必要があります。

各検索位置で、その検索位置から CHARACTER_LENGTH (search-string) - 1 の値だけ右にある位置までの source-string のサブストリングが、search-string と等しい場合に、一致が検出されます。

この関数の結果は長精度整数になります。 結果は、source-string 中の search-string のインスタンスの開始位置です。 この値は、start 指定に関わらず、ストリングの開始位置を意味します。

引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数のいずれかが NULL の場合、その結果は NULL 値です。

LOCATE_IN_STRING は文字を基本として機能します。LOCATE_IN_STRING は文字ストリング単位で実行されるため、シフトイン、シフトアウト文字がまったく同じ場所にある必要がなく、これらの文字は、どの文字が SBCS でどの文字が DBCS であるかを示すためにだけ意味があります。

検索ストリング の CCSID がソース・ストリング の CCSID と異なる場合は、ソース・ストリング の CCSID に変換されます。

LOCATE_IN_STRING 関数を含むステートメントの実行時に *HEX 以外の照合順序が有効で、しかも引数が SBCS データ、混合データ、または Unicode データの場合、結果は、その集合の各値の重み付けされた値の比較によって求められます。 値の重み付けは、該当の照合順序に基づいています。 ICU 照合順序表は、LOCATE 関数では指定できません。

代替構文: INSTR は LOCATE_IN_STRING のシノニムとして使用できます。

  • ストリング「Jürgen lives on Hegelstraße」内の文字「ß」の位置を、ストリング末尾から検索して特定し、そのストリング内での位置をホスト変数 POSITION に設定します。
    SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1);
    ホスト変数 POSITION の値は 26 に設定されます。
  • ストリングの開始位置から検索することにより、ストリング「WINNING」内で文字「N」が現れる位置を検索します。
    SELECT LOCATE_IN_STRING('WINNING','N',1,3),     
           LOCATE_IN_STRING('WINNING','N',3,2),
           LOCATE_IN_STRING('WINNING','N',3,3)
    FROM SYSIBM.SYSDUMMY1;
    次の値を戻します。
    6     4     6  
  • ストリングの末尾から検索することにより、ストリング「WINNING」内で文字「N」が現れる位置を検索します。
    SELECT LOCATE_IN_STRING('WINNING','N',-1,3), 
           LOCATE_IN_STRING('WINNING','N',-3,2), 
           LOCATE_IN_STRING('WINNING','N',-3,3)
    FROM SYSIBM.SYSDUMMY1;
    次の値を戻します。
    3     3     0
変更の終わり