$EXTRACT (SQL) Contents 概要 引数 例 メモ 関連項目 文字列から、指定された位置にある文字を抽出する文字列関数です。 Synopsis $EXTRACT(string[,from[,to]]) 引数 引数 説明 string 部分文字列を抽出するターゲット文字列。 from オプション — 抽出する文字のターゲット文字列内での位置 (1 文字を抽出する場合はその文字の位置、複数文字を抽出する場合はその先頭文字の位置)。1 から始まる正の整数として指定します。 to オプション — 抽出する文字の範囲の最終位置 (その文字まで抽出)。 1 から始まる正の整数として指定します。 概要 $EXTRACT は string の指定した位置から部分文字列を返します。返される部分文字列の内容は、使用する引数によって決まります。 $EXTRACT(string) は、文字列の先頭文字を抽出します。 $EXTRACT(string,from) は、from で指定した位置の文字を抽出します。例えば、変数 var1 が文字列 “ABCD” を含むときは、以下のコマンドは “B” を抽出します (2 番目の文字)。 SELECT $EXTRACT('ABCD',2) AS Extracted $EXTRACT(string,from,to) は、from の位置で開始し to の位置で終了する文字列の範囲を抽出します。例えば、以下のコマンドは、文字列 “1234Alabama567” から文字列 “Alabama” (つまり、5 番目の位置から 11 番目の位置までにあるすべての文字) を抽出します。 SELECT $EXTRACT('1234Alabama567',5,11) AS Extracted この関数は、データ型 VARCHAR を返します。 引数 string string には、変数名、数値、文字列リテラル、または任意の有効な式を指定できます。 from from 値には、正の整数を指定する必要があります (例外は、"メモ" を参照)。小数値の場合は、小数桁が切り捨てられ、整数部分のみが使用されます。 from 値が文字列内の文字数よりも大きいときは、$EXTRACT は NULL 文字列を返します。 from が to 引数なしで指定されている場合は、その位置にある 1 文字が抽出されます。to 引数と共に使用されている場合、from は抽出する範囲の先頭を表し、to 値よりも小さな値でなくてはなりません。from が to と等しい場合、$EXTRACT は指定した位置にある 1 文字を返します。from が to よりも大きいときは、$EXTRACT は NULL 文字列を返します。 to to 引数は、from 引数と共に使用する必要があります。必ず正の整数を指定します。小数値の場合は、小数桁が切り捨てられ、整数部分のみが使用されます。 to の値が from の値以上である場合、$EXTRACT は指定した部分列を返します。to が文字列の長さより大きい場合、$EXTRACT は from の位置から文字列の終了までの部分文字列を返します。to が from よりも小さい場合、$EXTRACT は NULL 文字列を返します。 例 以下の例は文字列の 4 番目の文字 “S” を返します。 SELECT $EXTRACT('THIS IS A TEST',4) AS Extracted 以下の例は、先頭から 7 番目の文字までの部分文字列 “THIS IS” を返します。 SELECT $EXTRACT('THIS IS A TEST',1,7) AS Extracted 以下の埋め込み SQL 例は、a から 2 番目の文字 (“B”) を抽出して、この値を変数 y に割り当てます。 SET a="ABCD" &sql(SELECT $EXTRACT(:a,2) INTO :y) IF SQLCODE'=0 { WRITE !,"Error code ",SQLCODE } ELSE { WRITE !,"The extract returns ",y } 以下の埋め込み SQL 例は、from 値が “1” のときに、引数 1 つの形式と引数 2 つの形式が、同じ結果になることを示しています。両方の $EXTRACT 関数は、“H” を返します。 SET a="HELLO" &sql(SELECT $EXTRACT(:a),$EXTRACT(:a,1) INTO :b,:c) IF SQLCODE'=0 { WRITE !,"Error code ",SQLCODE } ELSE { WRITE !,"The one-arg form returns ",b WRITE !,"The two-arg form returns ",c } メモ $PIECE および $LIST と比較した $EXTRACT $EXTRACT は、文字列からの整数位置により、部分文字列を返します。$PIECE と $LIST は両方とも、特別にフォーマットされた文字列を処理します。$PIECE は、文字列内に区切り文字が使用されている標準文字の文字列から、部分文字列を返します。$LIST は、要素 (文字ではない) の整数位置により、エンコードされたリストから要素のサブリストを返します。$LIST は、通常の文字列に対して使用できません。また、$EXTRACT は、エンコードされたリストに対して使用できません。$EXTRACT、$FIND、$LENGTH、および $PIECE 関数は、標準文字の文字列に対して処理を実行します。さまざまな $LIST 関数は、エンコードされた文字列を操作します。この文字列は、標準の文字列とは互換性がありません。唯一の例外は、$LISTGET 関数と、引数が 1 つおよび 2 つの形式の $LIST 関数です。これらの関数は、入力としてエンコードされた文字の文字列を受け取り、単一要素値を標準文字の文字列として出力します。 $EXTRACT と Unicode $EXTRACT 関数は、バイトではなく、文字を操作します。したがって、以下の例で示すように、Unicode の文字列は ASCII 文字列と同様に処理されます。以下の埋め込み SQL の例では、pi ($CHAR(960)) に対して Unicode 文字を使っています。 SET a="QT PIE" SET b=("QT "_$CHAR(960)) &sql(SELECT $EXTRACT(:a,-33,4), $EXTRACT(:a,4,4), $EXTRACT(:a,4,99), $EXTRACT(:b,-33,4), $EXTRACT(:b,4,4), $EXTRACT(:b,4,99) INTO :a1,:a2,:a3,:b1,:b2,:b3) IF SQLCODE'=0 { WRITE !,"Error code ",SQLCODE } ELSE { WRITE !,"ASCII form returns ",!,a1,!,a2,!,a3 WRITE !,"Unicode form returns ",!,b1,!,b2,!,b3 } NULL と無効な引数 string が NULL 文字列の場合は、NULL 文字列が返されます。 from が文字列の長さよりも大きい場合は、NULL 文字列が返されます。 from がゼロまたは負の数のときに to が指定されていない場合は、NULL 文字列が返されます。 to がゼロ、負の数、または from よりも小さな数の場合は、NULL 文字列が返されます。 to が有効な値の場合は、from はゼロまたは負の数でもかまいません。$EXTRACT は、この from 値を 1 として処理します。 無効な引数値に対して、SQLCODE エラーは生成されません。以下の例は、負の from 値が 1 として評価されるため、$EXTRACT は先頭から 7 番目の文字までの部分文字列 “THIS IS” を返します。 SELECT $EXTRACT('THIS IS A TEST',-7,7) 以下の埋め込み SQL の例にある $EXTRACT 関数呼び出しは、すべて NULL 文字列を返します。 SET a="THIS IS A TEST" SET b="" &sql(SELECT $EXTRACT(:a,33), $EXTRACT(:a,-7), $EXTRACT(:a,3,2), $EXTRACT(:a,-7,0), $EXTRACT(:a,-7,-10), $EXTRACT(:b,-33,4), $EXTRACT(:b,4,4), $EXTRACT(:b,4,99), $EXTRACT(NULL,-33,4), $EXTRACT(NULL,4,4), $EXTRACT(NULL,4,99) INTO :a1,:a2,:a3,:a4,:a5,:b1,:b2,:b3,:c1,:c2,:c3) IF SQLCODE'=0 { WRITE !,"Error code ",SQLCODE } ELSE { WRITE !,"FROM too big: ",a1 WRITE !,"FROM negative, no TO: ",a2 WRITE !,"TO smaller than FROM: ",a3 WRITE !,"TO not a positive integer: ",a4,a5 WRITE !,"LIST is null string: ",b1,b2,b3,c1,c2,c3 } 関連項目 SQL 関数 : $FIND $LENGTH $LIST $LISTGET $PIECE ObjectScript 関数: $EXTRACT $FIND $LENGTH $LIST $LISTBUILD $LISTGET $PIECE FeedbackOpens in a new tab