Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$PIECE

区切り文字で識別される部分文字列を返す文字列関数です。

Synopsis

$PIECE(plist,delimiter[,from[,to]])

引数

plist 部分文字列を返すターゲット文字列。
delimiter 部分文字列の識別に使用される区切り文字。
from オプション — ターゲット文字列から返す部分文字列または部分文字列の範囲の先頭を指定する整数。部分文字列は、delimiter で区切られ、1 から始まります。省略すると、最初の部分文字列が返されます。
to オプション — ターゲット文字列から返す部分文字列の範囲の最終部分文字列を指定する整数。from と共に使用する必要があります。

概要

$PIECE は、指定された部分文字列 (断片) を plist から返します。返される部分文字列は、使用する引数によって異なります。

  • $PIECE(plist,delimiter) は、plist の最初の部分文字列を返します。delimiterplist 内に見つかった場合、最初の delimiter の前にある部分文字列が返されます。delimiterplist 内に見つからない場合、返される部分文字列は plist です。

  • $PIECE(plist,delimiter,from) は、plistn 番目の部分文字列を返します。整数 nfrom 引数で指定し、部分文字列は delimiter で区切ります。区切り文字は返されません。

  • $PIECE(plist,delimiter,from,to) は、from で指定された部分文字列から to で指定された部分文字列までの範囲にある部分文字列を返します。4 つの引数の $PIECE が返す文字列は、from から to までの部分文字列の間にあり、それらを区切っている delimiter を含んだすべての文字列を返します。to が部分文字列数よりも大きい場合、返される部分文字列には、plist 文字列の末尾までのすべての部分文字列が含まれます。

引数

plist

部分文字列を返すターゲット文字列です。文字列リテラル、変数名、または文字列として評価される任意の有効な式を指定できます。

通常、ターゲット文字列には、区切り文字として使用される文字 (または文字列) が含まれます。この文字または文字列は、plist 内でデータ値として使用することはできません。

ターゲット文字列として NULL 文字列 (NULL) を指定した場合、$PIECE は <null>、つまり NULL 文字列を返します。

delimiter

plist 内の部分文字列を区切るために使用する検索文字列です。(引用符で囲まれた) 数値または文字列リテラル、変数名、あるいは文字列として評価される式を指定できます。

通常、区切り文字には、文字列データ内で決して使用されることがなく、部分文字列を区切る文字としてのみ使用する特定の文字を設定します。区切り文字には、複数文字からなる検索文字列を指定することもできますが、それを構成する個々の文字は文字列データ内で使用できます。

区切り文字として NULL 文字列 (NULL) を指定した場合、$PIECE は <null>、つまり NULL 文字列を返します。

from

plist 内の部分文字列の番号で、1 から始まります。これは正の整数、整数変数の名前、または正の整数として評価される式でなければなりません。部分文字列は区切り文字で区切ります。

  • from 引数が省略された場合または 1 に設定された場合、$PIECEplist の最初の部分文字列を返します。指定された区切り文字が plist にない場合、from 値に 1 を指定すると plist を返します。

  • from 引数がカウントによって plist の最後の部分文字列を指す場合、この部分文字列の後における区切り文字の有無に関係なく、この部分文字列が返されます。

  • from の値が NULL、空文字列、ゼロ、または負数であり、to 引数が指定されない場合、$PIECE は NULL 文字列を返します。しかし、to 引数が指定された場合、$PIECE はその from 値を from=1 である場合と同じように扱います。

  • from の値が plist の部分文字列数よりも大きい場合、$PIECE は NULL 文字列を返します。

引数 from が引数 to と共に使用される場合、from は文字列として返される部分文字列の範囲の先頭を指定し、to の値よりも小さくなければなりません。

to

from 引数によって先頭が指定された範囲を終了する、plist 内の部分文字列の番号です。返される文字列には、from の位置の部分文字列と to の位置の部分文字列に加えて、その両者の間の部分文字列とそれらを区切る区切り文字が含まれます。to 引数は、正の整数、整数変数の名前、または正の整数に評価される式でなければなりません。引数 to は必ず from と共に使用し、from の値よりも大きい必要があります。

  • fromto よりも小さい場合、$PIECE は、from 位置の部分文字列と to 位置の部分文字列を含む、この範囲内にあるすべての区切られた部分文字列からなる文字列を返します。この返された文字列には、範囲内にある部分文字列と区切り文字が含まれます。

  • 区切られた部分文字列の数よりも to が大きい場合、返される値には、from 位置の部分文字列から plist 文字列の末尾までのすべての文字列データ (部分文字列と区切り文字) が含まれます。

  • fromto と同じ場合、from 位置の部分文字列が返されます。

  • fromto よりも大きい場合、$PIECE は NULL 文字列を返します。

  • to が NULL 文字列 (NULL) の場合、$PIECE は NULL 文字列を返します。

以下の例は、"," 区切り文字で識別された最初の部分文字列である 'Red' を返します。

SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',')

以下の例は、"," 区切り文字で識別された 3 番目の部分文字列である 'Blue' を返します。

SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',3)

以下の例は、colorlist の 3 番目から 5 番目の要素である 'Blue,Yellow,Orange' を、"," で区切って返します。

SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',3,5)

以下の $PIECE 関数はどちらも '123' を返します。これは、from が 1 のとき、引数が 2 つの形式と 3 つの形式が同等であることを示しています。

SELECT $PIECE('123#456#789','#') AS TwoArg
SELECT $PIECE('123#456#789','#',1) AS ThreeArg

以下の例は、複数文字の区切り文字列 '#-#' を使用して、3 番目の部分文字列 '789' を返します。この場合、区切り文字列を構成する個々の文字の '#' と '-' はデータ値として使用でき、指定された文字シーケンス (#-#) のみが区切り文字列として認識されます。

SELECT $PIECE('1#2-3#-#45##6#-#789','#-#',3)

以下の例は 'MAR;APR;MAY' を返します。これは 3 番目から 5 番目の部分文字列で構成され、delimiter';' で区別されています。

SELECT $PIECE('JAN;FEB;MAR;APR;MAY;JUN',';',3,5)

以下の例は、$PIECE を使用して従業員名と仕入先連絡先名から名字を抽出し、従業員が仕入先と同じ名字を持つインスタンスを返す JOIN を実行します。

SELECT E.Name,V.Contact 
FROM Sample.Employee AS E INNER JOIN Sample.Vendor AS V 
ON $PIECE(E.Name,',')=$PIECE(V.Contact,',')

メモ

データ値をアンパックする $PIECE の使用法

$PIECE は、通常、区切り文字で区切られた複数のフィールドを含むデータ値を "アンパック" するために使用されます。一般的な区切り文字には、スラッシュ (/)、コンマ (,)、スペース ( )、およびセミコロン (;) があります。以下の例の値は、$PIECE を使用すると効率的に処理できます。

'John Jones/29 River St./Boston MA, 02095'
'Mumps;Measles;Chicken Pox;Diptheria'
'45.23,52.76,89.05,48.27'

$PIECE および $LENGTH

2 つの引数の $LENGTH は、区切り文字に基づいて、文字列の部分文字列数を返します。$LENGTH を使用して文字列の部分文字列数を調べ、$PIECE を使用して個々の部分文字列を抽出します。

$PIECE および $LIST

$PIECE 関数と $LIST 関数で使用されるデータ格納方法には互換性がなく、組み合わせて使用することはできません。例えば、$LISTBUILD を使用して作成されたリストに対して $PIECE を使用すると、予測できない結果を生じる場合があるため、使用しないでください。このことは、SQL 関数および対応する ObjectScript 関数の両方に当てはまります。

$LIST 関数は、特定の区切り文字を使用せずに部分文字列を指定します。区切り文字または区切り文字シーケンスの設定が特定のデータ型 (ビット文字列データなど) に対して不適切な場合は、$LISTBUILD$LIST SQL 関数を使用して部分文字列の格納と検索を行ってください。

NULL 値

$PIECE は、値が NULL 文字列 (NULL) の部分文字列と、存在しない部分文字列を区別しません。両方とも、<null>、つまり NULL 文字列値が返されます。例えば、以下の 2 つの例はいずれも、from 値の 7 に対して NULL 文字列値を返します。

SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',7)
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black,',',',7)

最初の例では、7 番目の部分文字列がないので、NULL 文字列が返されます。2 番目の例では、plist 文字列の最後に区切り文字で示された 7 番目の部分文字列があり、この 7 番目の部分文字列の値が NULL 文字列です。

以下の例は、plist 内に NULL 値がある場合を示しています。これは部分文字列 3 を抽出します。この部分文字列は存在しますが、NULL 文字列です。

SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',3)

以下の例も、NULL 文字列を返します。指定された部分文字列が存在しないためです。

SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',0)
SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',8,20)

以下の例では、plist 文字列内に delimiter が使用されていないため、$PIECE 関数は plist 文字列全体を返します。

SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black,','#')

入れ子になった $PIECE 操作

複雑な取り出しを実行するには、お互いの中で $PIECE 参照を入れ子にすることができます。内側の $PIECE で返された部分文字列が外側の $PIECE の操作対象になります。各 $PIECE はそれぞれの区切り文字を使用します。例えば、以下の例は、州の省略形の 'MA' を返します。

SELECT $PIECE($PIECE('John Jones/29 River St./Boston MA 02095','/',3),' ',2)

以下は、入れ子になった $PIECE 操作のもう 1 つの例で、区切り文字の階層が使用されています。最初に、内側の $PIECE がキャレット (^) の区切り文字を使用して、文字列の 2 番目の部分文字列である 'A,B,C' を探します。次に、外側の $PIECE がコンマ (,) 区切り文字を使用して、部分文字列 'A,B,C' の最初と 2 番目の部分文字列 ('A,B') を返します。

SELECT $PIECE($PIECE('1,2,3^A,B,C^@#!','^',2),',',1,2)

関連項目

FeedbackOpens in a new tab