POSITION

POSITION 関数は、あるストリング (検索ストリング と呼ばれる) の、別のストリング (ソース・ストリング と呼ばれる) の中での、最初の出現箇所の開始位置を戻します。検索ストリング が見つからず、どちらの引数も NULL でない場合、結果はゼロになります。検索ストリング が見つかった場合、結果は 1 から ソース・ストリング の実際の長さまでの数値になります。

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

関連関数については、LOCATEおよび POSSTRを参照してください。

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

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

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

検索ストリング の CCSID がソース・ストリング の CCSID と異なる場合は、ソース・ストリング の CCSID に変換されます。ソース・ストリング の CCSID が混合データまたは UTF-8 の場合、CCSID は UTF-16 に変換されます。

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

検索ストリング の長さがゼロの場合は、この関数が戻す結果は 1 です。その他の場合は、次のようになります。

  • ソース・ストリング の長さがゼロの場合は、この関数が戻す結果は 0 です。
  • その他の場合は、
    • 検索ストリング の値がソース・ストリング の値の範囲内の連続位置のサブストリングの長さに等しければ、この関数の戻す結果は、ソース・ストリング 値内のそのような最初のサブストリングの開始位置です。
    • それ以外の場合は、この関数の戻す結果は 0 です。1

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