指定されたリストで、要求された値を検索する汎用 SQL 関数です。
Synopsis
$LISTFIND(list,value[,startafter])
この関数は、データ型 SMALLINT を返します。
以下の例は、要求された文字列の最初に発生した位置である 2 を返します。
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Blue')
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
以下の例は 0 を返し、要求された文字列が見つからなかったことを表します。
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Orange')
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Blue',2)
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
2 番目の例は、
startafter がゼロ (既定値) に設定されているため、要求された文字列が先頭位置にあるのを見つけます。
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Red',0)
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
3 番目の例は、要求された文字列の 1 つ目が
startafter 位置より前にあるため、2 つ目を見つけて 5 を返します。
SET a=$LISTBUILD("Red","Blue","Green","Yellow","Blue")
&sql(SELECT $LISTFIND(:a,'Blue',3)
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
$LISTFIND 関数は、完全な要素のみと一致します。したがって、以下の例ではすべての要素に B が含まれるものの、リスト要素が文字列 B とは同じでないため、0 を返します。
SET a=$LISTBUILD("ABC","BCD","BBB")
&sql(SELECT $LISTFIND(:a,'B')
INTO :b
FROM Sample.Person)
WRITE !,"The position is ",b
list 引数の式が有効なリストに評価されない場合は、400 SQL の致命的なエラーが発生します。
SET a="Blue"
&sql(SELECT $LISTFIND(:a,'Blue')
INTO :b
FROM Sample.Person)
WRITE !,"Error code ",SQLCODE
WRITE !,"The position is ",b
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Blue',-1)
INTO :b
FROM Sample.Person)
WRITE !,"Error code ",SQLCODE
WRITE !,"The position is ",b
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTFIND(:a,'Blue',-3)
INTO :b
FROM Sample.Person)
WRITE !,"Error code ",SQLCODE
WRITE !,"The position is ",b