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?

$LISTSAME

2 つのリストを比較し、ブーリアン値を返すリスト関数です。

Synopsis

$LISTSAME(list1,list2)

引数

list1 有効なリストとして評価される式。
list2 有効なリストとして評価される式。

説明

$LISTSAME は、2 つのリストの内容を比較し、リストが同一の場合、1 を返します。リストが同一でない場合、$LISTSAME は 0 を返します。$LISTSAME は、2 つのリストを要素ごとに比較します。2 つのリストが同一であるには、同じ数の要素が含まれ、list1 内の各要素が list2 内の対応する要素に一致している必要があります。

$LISTSAME は、その文字列表現を使用するリスト要素を比較します。$LISTSAME 比較では大文字と小文字が区別されます。$LISTSAME は 2 つのリストを要素ごとに左から右の順に比較します。したがって、$LISTSAME は対応しない最初のリスト要素のペアを検出すると 0 を返し、それ以降の項目が有効なリスト要素かどうかはチェックしません。

この関数は、データ型 SMALLINT を返します。

引数

list (list1 および list2)

list は、複数の要素を含むエンコードされた文字列です。リストは、SQL $LISTBUILD 関数または ObjectScript $LISTBUILD 関数を使用して作成できます。区切り文字列からリストへの変換は、SQL $LISTFROMSTRING 関数または ObjectScript $LISTFROMSTRING 関数を使用して行うことができます。既存のリストからのリストの抽出は、SQL $LIST 関数または ObjectScript $LIST 関数を使用して行うことができます。

以下に示すのは、有効なリストの例です。

  • $LISTBUILD('a','b','c'): 3 つの要素のリスト。

  • $LISTBUILD('a','','c'): 3 つの要素のリスト。2 番目の要素には NULL 文字列値があります。

  • $LISTBUILD('a',,'c') または $LISTBUILD('a',NULL,'c'): 3 つの要素リスト。2 番目の要素に値はありません。

  • $LISTBUILD(NULL,NULL) または $LISTBUILD(,NULL): 2 つの要素リスト。それぞれの要素に値はありません。

  • $LISTBUILD(NULL) または $LISTBUILD(): 1 つの要素リスト。要素に値はありません。

list 引数が NULL の場合、$LISTSAME は NULL を返します。list 引数が有効でないリストの場合 (および NULL でない場合)、Caché SQL は SQLCODE -400 の致命的なエラーを生成します。

以下の埋め込み SQL の例では、$LISTSAME を使用して 2 つのリスト引数を比較しています。

  SET a=$LISTBUILD("Red",,"Yellow","Green","","Violet")
  SET b=$LISTBUILD("Red",,"Yellow","Green","","Violet")
 &sql(SELECT $LISTSAME(:a,:b)
      INTO :c )
  IF SQLCODE'=0 {
    WRITE !,"Error code ",SQLCODE }
  ELSEIF c=1 { WRITE "lists a and b are the same",! }
  ELSE { WRITE "lists a and b are not the same",! }

以下の SQL の例では、NULL であるか、存在しないか、または空の文字列要素があるリストを比較しています。

  SELECT $LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red',,'Blue')) AS NullAbsent,
         $LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red','','Blue')) AS NullEmpty,
         $LISTSAME($LISTBUILD('Red',,'Blue'),$LISTBUILD('Red','','Blue')) AS AbsentEmpty

$LISTSAME 比較は、Caché 統合によって使用されるのと同じ等価テストではありません。統合は、2 つのリストをエンコードされた文字列として (文字ごとに) 比較します。$LISTSAME は、2 つのリストを要素ごとに比較します。以下の例で示すように、1 つの数字と 1 つの数値文字列を比較するとき、この相違が容易にわかります。

   SET a = $LISTBUILD("365")
   SET b = $LISTBUILD(365)
   IF a=b 
     { WRITE "Equal sign: lists a and b are the same",! }
   ELSE { WRITE "Equal sign: lists a and b are not the same",! }
  &sql(SELECT $LISTSAME(:a,:b)
      INTO :c )
  IF SQLCODE'=0 {
    WRITE !,"Error code ",SQLCODE }
  ELSEIF c=1 { WRITE "$LISTSAME: lists a and b are the same",! }
  ELSE { WRITE "$LISTSAME: lists a and b are not the same",! }

以下の SQL の例では、キャノニック形式および非キャノニック形式の数字および数値文字列が含まれるリストを比較しています。数値と文字列のリスト要素を比較する際、文字列リスト要素では、数値をキャノニック形式で表す必要があります。これは、Caché では常に、比較の実行前に、数字がキャノニック形式に変換されるためです。以下の例で、$LISTSAME は文字列と数字を比較します。最初の 3 つの $LISTSAME 関数は 1 (同一) を返します。4 つ目の $LISTSAME 関数は 0 (同一でない) を返します。これは、文字列表現がキャノニック形式でないためです。

  SELECT $LISTSAME($LISTBUILD('365'),$LISTBUILD(365)),
         $LISTSAME($LISTBUILD('365'),$LISTBUILD(365.0)),
         $LISTSAME($LISTBUILD('365.5'),$LISTBUILD(365.5)),
         $LISTSAME($LISTBUILD('365.0'),$LISTBUILD(365.0))

関連項目

FeedbackOpens in a new tab