LOCATE

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

構文図を読む構文図をスキップする
>>-LOCATE--(--search-string--,--source-string--+----------+--)-><
                                               '-,--start-'      

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

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

  POSITION( SUBSTRING(source-string,start) , search-string ) + start - 1

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

  POSITION( source-string , search-string )

詳しくは、POSITIONを参照してください。

この関数の結果は長精度整数になります。 引数のいずれかが NULL になる可能性がある場合は、結果も NULL になる可能性があります。いずれかの引数が NULL の場合は、結果は NULL 値になります。

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

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

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

  • IN_TRAY 表の全項目から、RECEIVED 列と SUBJECT 列、それに NOTE_TEXT 列の語「GOOD」の開始位置を選択します。
      SELECT RECEIVED, SUBJECT, LOCATE('GOOD', NOTE_TEXT)
        FROM IN_TRAY
        WHERE LOCATE('GOOD', NOTE_TEXT) <> 0
  • NOTE は VARCHAR(128) の列で Unicode UTF-8 でエンコードされ、値 'Jürgen lives on Hegelstraße' を含むものと想定します。ストリング内で文字「ß」の文字位置を検索します。
      SELECT LOCATE( 'ß', NOTE ), POSSTR( NOTE_TEXT, 'ß')
        FROM T1
    LOCATE の場合は値 26、POSSTR の場合には値 27 を戻します。