デリミタで区切った値の文字列を使用して、ローのセットを返します (各値に 1 つのロー)。
sa_split_list( str [, delim ] [, maxlen ] )
str 分割する値を含む文字列を指定する LONG VARCHAR パラメータ。文字列は delim で区切られます。
delim str の値を分割するときに使用するデリミタを指定する任意の CHAR(10) パラメータ。デリミタは、任意の文字の文字列 (10 バイトまで) にできます。delim が指定されない場合、デフォルトでカンマが使用されます。
maxlen 戻り値の最大長を指定する任意の INTEGER パラメータ。たとえば、maxlen が 3 に設定されている場合、結果セットの値は 3 文字の長さに切り詰められます。0 (デフォルト) を指定すると、値は任意の長さで指定できます。
カラム名 | データ型 | 説明 |
---|---|---|
line_num | INTEGER | ローのシーケンス番号。 |
row_value | LONG VARCHAR | 文字列の値。必要に応じて、maxlen に切り詰められます。 |
sa_split_list プロシージャは、デリミタで区切られた値のリストの文字列を受け取り、1 つのローに 1 つの値が入れられた結果セットを返します。これは、LIST 関数 [集合] が実行するアクションの逆です。文字列が次の値の場合、row_value には空の文字列が返されます。
入力文字列内の空白スペースは重要です。デリミタがスペース文字の場合、入力文字列に余分なスペースがあると結果セットの中に余分なローが入ります。デリミタがスペース文字ではない場合、入力文字列のスペースは結果セット内の値から削除されません。
なし
なし
次のクエリは、色が黒い製品のリストを返します。
SELECT list( Name ) FROM Products WHERE Color = 'Black'; |
list (Products.Name) |
---|
Tee Shirt,Baseball Cap,Visor,Shorts |
次の例では、sa_split_list プロシージャを使用して、集約されたリストから元の結果セットを返します。
SELECT * FROM sa_split_list( 'Tee Shirt,Baseball Cap,Visor,Shorts' ); |
line_num | row_value |
---|---|
1 | Tee Shirt |
2 | Baseball Cap |
3 | Visor |
4 | Shorts |
次の例は、ワードごとに 1 つのローを返します。row_value が空の文字列のローを返さないようにするには、WHERE 句を指定する必要があります。
SELECT * FROM sa_split_list( 'one||three|four||six|', '|' ) WHERE row_value <> ''; |
line_num | row_value |
---|---|
1 | one |
3 | three |
4 | four |
6 | six |
次の例は、ProductsWithColor というプロシージャが作成されます。呼び出されると、ProductsWithColor プロシージャは sa_split_list を使用して、ユーザが指定した色の値を解析し、Products テーブルの Color カラムを検索し、ユーザが規定した色のいずれかに一致する各プロダクトの名前、説明、サイズ、色を返します。
次のプロシージャを呼び出した結果は、色が白または黒であるすべての製品の名前、説明、サイズ、および色です。
CREATE PROCEDURE ProductsWithColor( IN color_list LONG VARCHAR ) BEGIN SELECT Name, Description, Size, Color FROM Products WHERE Color IN ( SELECT row_value FROM sa_split_list( color_list ) ) END; go SELECT * from ProductsWithColor( 'white,black' ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |