POSITION スカラー関数
POSITION 関数は、ある引数内で別の引数が最初に現れる位置を戻します。この位置は、指定されたストリング単位で表わされます。
スキーマは SYSIBM です。
search-string が見つからず、どちらの引数も null でない場合、結果は 0 になります。 search-string が検出された場合、結果は 1 から source-string の実際の長さまでの数値で、明示的に指定された単位で表されます。
- 検索文字列
- 検索対象のストリングを指定する式。 search-string が戻す値は、実
際の長さが 4000 バイトを超えない、任意の組み込みストリングのデータ・タイプであることが必要です。
引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。
式は以下のいずれかの項目によって指定することができます。- 定数
- 特殊レジスター
- 変数
- 引数が上記のいずれかであるスカラー関数 (ただし、 ネストされた関数呼び出しは使用できない)
- 配列エレメント指定
- 上記のいずれかを連結する式 (CONCAT または || を用いる)
- その引数が上記のいずれかであるような CAST の指定
- 列名
- ソース文字列
- 検索を行う対象のソース・ストリングを指定する式。 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-string が source-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 を設定します。
ホスト変数 LOCATION の値は 27 に設定されます。SET :LOCATION = POSITION('ß','Jürgen lives on Hegelstraße',CODEUNITS32); - 例 3:
- ストリング「Jürgen lives on Hegelstraße」内の文字「ß」の位置を見つけ、ストリング内の位置 (OCTETS 単位で測定) を使用してホスト変数 LOCATION を設定します。
ホスト変数 LOCATION の値は 28 に設定されます。SET :LOCATION = POSITION('ß','Jürgen lives on Hegelstraße',OCTETS);
