LOCATE
LOCATE 関数は、あるストリング (search-string と呼ばれる) の、別のストリング (source-string と呼ばれる) の中での、最初の出現箇所の開始位置を戻します。 検索ストリング が見つからず、どちらの引数も NULL でない場合、結果はゼロになります。検索ストリング が見つかった場合、結果は 1 から ソース・ストリング の実際の長さまでの数値になります。オプションの start が指定されている場合、それは、source-string 中での検索が開始される文字位置を示します。
- search-string
- 検索するオブジェクトのストリングを指定する式。検索ストリング には、任意の組み込み数値、日時、またはストリング式を指定できます。これは、ソース・ストリング と互換性のあるものでなければなりません。 数値または日時引数は、関数を評価する前に文字ストリングにキャストされます。数値および日時から文字ストリングへの変換について詳しくは、VARCHAR を参照してください。
- source-string
- 検索を行う相手先のソース・ストリングを指定する式。 ソース・ストリング には、任意の組み込み数値、日時、またはストリング式を指定できます。数値または日時引数は、関数を評価する前に文字ストリングにキャストされます。数値および日時から文字ストリングへの変換について詳しくは、VARCHAR を参照してください。
- start
- 検索が開始される source-string 内の位置を指定する式。
start には、任意の組み込み数値、文字ストリング、またはグラフィック・ストリング式を指定できます。
値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。値はゼロより大きくなければなりません。
開始桁 を指定した場合は、この関数は次と同じになります。
POSITION( search-string , SUBSTRING(source-string,start) ) + start - 1
開始桁 を指定しない場合、この関数は次と同じになります。
POSITION( search-string , source-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' を含むものと想定します。ストリング内で文字「ß」の文字位置を検索します。
LOCATE の場合は値 26、POSSTR の場合には値 27 を戻します。SELECT LOCATE( 'ß', NOTE ), POSSTR( NOTE_TEXT, 'ß') FROM T1