POSITION スカラー関数

POSITION 関数は、ある引数内で別の引数が最初に現れる位置を戻します。この位置は、指定されたストリング単位で表わされます。

構文図を読むビジュアルシンタックスダイアグラムをスキップするPOSITION(search-string ,ソース文字列 ,CODEUNITS16CODEUNITS32OCTETS )

スキーマは SYSIBM です。

search-string が見つからず、どちらの引数も null でない場合、結果は 0 になります。 search-string が検出された場合、結果は 1 から source-string の実際の長さまでの数値で、明示的に指定された単位で表されます。

検索文字列
検索対象のストリングを指定する式。 search-string が戻す値は、実 際の長さが 4000 バイトを超えない、任意の組み込みストリングのデータ・タイプであることが必要です。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

式は以下のいずれかの項目によって指定することができます。
  • 定数
  • 特殊レジスター
  • 変数
  • 引数が上記のいずれかであるスカラー関数 (ただし、 ネストされた関数呼び出しは使用できない)
  • 配列エレメント指定
  • 上記のいずれかを連結する式 (CONCAT または || を用いる)
  • その引数が上記のいずれかであるような CAST の指定
  • 列名
これらの規則は、LIKE 述部の pattern-expression に関して記述されるものと同様になります。
ソース文字列
検索を行う対象のソース・ストリングを指定する式。 source-string が戻す値は、任意 の組み込みストリング・データ・タイプであることが必要です。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

式は以下のいずれかの項目によって指定することができます。
  • 定数
  • 特殊レジスター
  • 変数
  • 引数が上記のいずれかであるスカラー関数 (ただし、 ネストされた関数呼び出しは使用できない)
  • 列名
  • 配列エレメント指定
  • その引数が上記のいずれかであるような CAST の指定
  • 上記のいずれかを連結する式 (CONCAT または || を用いる)
CODEUNITS16、CODEUNITS32、または OCTETS
戻される結果を表すのに使用するストリング長の 単位を指定します。 source-string がビット・データとして定義された文字ストリング の場合は、CODEUNITS16 また CODEUNITS32 は指定できません。 source-string がグラフィック・ストリングの場合は、OCTETS は指定できません。
CODEUNITS16
戻される結果が、16 ビットの UTF-16 コード単位の形で表現されることを指定します。
CODEUNITS32
戻される結果が、32 ビットの UTF-32 コード単位の形で表現されることを指定します。
OCTETS
戻される結果が、バイトの形で表現されることを指定します。

CODEUNITS16、 CODEUNITS32、OCTETSの詳細については、「文字列単位仕様」 を参照してください。

1 番目と 2 番目の引数は、互換性のあるストリング・タイプを持たなければなりません。 互換性についての詳細は、『ストリングを結合する操作の変換規則』を参照してください。

検索ストリングとソース・ストリングの CCSID セットが異なる場合は、 search-string がソース・ストリングの CCSID セットに変換されます。 CODEUNITS16 または CODEUNITS32 のいずれかが指定されている場合、この関数は、Unicode 形式でその データの一時コピー上で評価される可能性があります。

ストリングには混合データが入っていてもかまいません。 OCTETS が指定されている場合:

  • ASCII データでは、検索ストリングまたはソース・ストリング に混合データが入っている場合、検索ストリングが検出されるのは、1 バイト文字 と 2 バイト文字の同じ組み合わせが、ソース・ストリングのまったく同じ位置で 検出された場合のみです。
  • EBCDIC データでは、検索ストリングまたはソース・ストリング に混合データが入っている場合、検索ストリングが検出されるのは、すべての シフトイン文字またはシフトアウト文字が、重複するシフト文字は無視して、 ソース・ストリングのまったく同じ位置で検出された場合のみです。
  • UTF-8 データでは、検索ストリングまたはソース・ストリング に混合データが入っている場合、検索ストリングが検出されるのは、1 バイト文字 とマルチバイト文字の同じ組み合わせが、ソース・ストリングのまったく同じ位置で 検出された場合のみです。

この関数の結果は長精度整数 (large integer) です。 POSITION 関数は、MIXED データ・ストリングを受け入れます。

結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。

OCTETS 指定で POSITION 関数が呼び出される場合、この関数は厳密なバイト ・カウントを基本として、1 バイト文字数または 2 バイト文字数とは無関 係に機能します。

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

結果の値は、以下の規則を現れた順に適用すること によって決まります。

  • search-string の長さがゼロの場合、結果は 1 になります。
  • source-string の長さがゼロの場合、結果は 0 になります。
  • search-string の値が、source-string の値の範囲内の連続する位置からな る同一長のサブストリングと等しい場合、その結果は、ソース・ストリング値内の最初の 該当するサブストリングの開始位置になります。
  • それ以外の場合、結果は 0 です。 これには、search-stringsource-string より長い場合も含まれます。

Example1:
ストリングを含む IN_TRAY 表内のすべての行の NOTE_TEXT 列内で、RECEIVED 列、SUBJECT 列、およびストリング 'GOOD BEER' の開始位置を選択します。
   SELECT RECEIVED, SUBJECT, POSITION('GOOD BEER', NOTE_TEXT, OCTETS)
     FROM IN_TRAY
     WHERE POSITION('GOOD BEER', NOTE_TEXT, OCTETS) <> 0;
例 2:
ストリング「Jürgen lives on Hegelstraße」内の文字「ß」の位置を見つけ、ストリング内の位置 (CODEUNITS32 単位で測定) を使用してホスト変数 LOCATION を設定します。
SET :LOCATION = POSITION('ß','Jürgen lives on Hegelstraße',CODEUNITS32);
ホスト変数 LOCATION の値は 27 に設定されます。
例 3:
ストリング「Jürgen lives on Hegelstraße」内の文字「ß」の位置を見つけ、ストリング内の位置 (OCTETS 単位で測定) を使用してホスト変数 LOCATION を設定します。
SET :LOCATION = POSITION('ß','Jürgen lives on Hegelstraße',OCTETS);
ホスト変数 LOCATION の値は 28 に設定されます。