7.15.4 ADB_GENERATE_SERIES関数
ADB_GENERATE_SERIES関数の引数に指定した範囲で一連の値を生成し,1列の表のデータとして検索できる形式にしたデータを返却します。
- 〈この項の構成〉
(1) 指定形式
ADB_GENERATE_SERIES関数::=
〔MASTER.〕{ADB_GENERATE_SERIES|GENERATE_SERIES} (開始値,終了値〔,間隔値〕)
開始値::=値式
終了値::=値式
間隔値::={整数定数|時間隔定数}
時間隔定数::=INTERVAL'ラベル付き間隔'
(2) 指定形式の説明
- 開始値:
-
生成される一連の値の開始値を値式で指定します。値式については,「7.21 値式」を参照してください。
指定規則を次に示します。
-
値式には,整数データまたは日時データを指定してください。日時データとして文字列定数(日付を表す既定の入力表現,時刻を表す既定の入力表現,または時刻印を表す既定の入力表現)も指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
-
開始値には,?パラメタを単独で指定できません。
-
- 終了値:
-
生成される一連の値の終了値を値式で指定します。値式については,「7.21 値式」を参照してください。
指定規則を次に示します。
-
値式には,整数データまたは日時データを指定してください。日時データとして文字列定数(日付を表す既定の入力表現,時刻を表す既定の入力表現,または時刻印を表す既定の入力表現)も指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
-
終了値に?パラメタを単独で指定した場合,?パラメタのデータ型には開始値のデータ型が仮定されます。
-
- 間隔値:
-
間隔値::={整数定数|時間隔定数} 時間隔定数::=INTERVAL'ラベル付き間隔'
生成される一連の各値の間隔を,整数定数または時間隔定数で指定します。ラベル付き間隔については,「7.29 ラベル付き間隔」を参照してください。
指定規則を次に示します。
-
開始値が整数データの場合,間隔値の指定を省略できます。省略した場合,間隔値に1が仮定されます。
-
開始値が整数データの場合,間隔値に時間隔定数を指定できません。
-
開始値が整数データの場合,間隔値に0を指定できません。
-
開始値が日時データまたは文字列定数の場合,間隔値は省略できません。
-
開始値が日時データまたは文字列定数の場合,間隔値には整数定数を指定できません。
-
間隔値が時間隔定数の場合,ラベル付き間隔の値式一次子には定数だけを指定できます。
-
間隔値が時間隔定数の場合,ラベル付き間隔の値式一次子には0を指定できません。
-
開始値がDATE型または文字列定数(日付を表す既定の入力表現)の場合,間隔値に指定した時間隔定数のラベル付き間隔修飾子にはHOUR,MINUTE,SECOND,MILLISECOND,MICROSECOND,NANOSECOND,またはPICOSECONDを指定できません。
-
開始値がTIME型または文字列定数(時刻を表す既定の入力表現)の場合,間隔値に指定した時間隔定数のラベル付き間隔修飾子にはYEAR,MONTH,またはDAYを指定できません。
-
(3) 規則
-
開始値と終了値には比較できるデータ型を指定してください。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
-
開始値を起点とし,終了値に達するまで間隔値の加算処理を繰り返します。その結果得られる一連の値を1列の表のデータとして検索できる形式にしたデータをADB_GENERATE_SERIES関数の実行結果として返却します。
- (例)
-
ADB_GENERATE_SERIES(1,3,1)
上記の場合,列値が1,2,3の3行のデータを返却します。
ADB_GENERATE_SERIES(3,1,-1)
上記の場合,列値が3,2,1の3行のデータを返却します。
ADB_GENERATE_SERIES(1,-1,1)
上記の場合,空行を返却します。
-
一連の値のデータ型が,ADB_GENERATE_SERIES関数を指定した表関数導出表によって導出される列のデータ型になります。
-
一連の値を格納する列のデータ型は,次の規則に従って決定されます。
-
開始値が整数データの場合
一連の値を格納する列のデータ型は,開始値,終了値,および間隔値を結果のデータ型の候補群として「7.21.2 値式の結果のデータ型」に示す規則に従って決定されます。
-
開始値が日時データまたは文字列定数の場合
一連の値を格納する列のデータ型は,開始値と終了値を候補群として「7.21.2 値式の結果のデータ型」に示す規則に従って決定されたデータ型と,間隔値の組み合わせによって決定されます。
表7‒3 一連の値を格納する列のデータ型(開始値が日時データまたは文字列定数の場合) 開始値と終了値を候補群として決定されたデータ型
間隔値に指定するラベル付き間隔修飾子
一連の値を格納する列のデータ型
DATE
YEAR
MONTH
DAY
DATE
TIME(p)
HOUR
MINUTE
TIME(p)
SECOND
TIME(MAX(p,0))
MILLISECOND
TIME(MAX(p,3))
MICROSECOND
TIME(MAX(p,6))
NANOSECOND
TIME(MAX(p,9))
PICOSECOND
TIME(MAX(p,12))
TIMESTAMP(p)※
YEAR
MONTH
DAY
HOUR
MINUTE
TIMESTAMP(p)
SECOND
TIMESTAMP(MAX(p,0))
MILLISECOND
TIMESTAMP(MAX(p,3))
MICROSECOND
TIMESTAMP(MAX(p,6))
NANOSECOND
TIMESTAMP(MAX(p,9))
PICOSECOND
TIMESTAMP(MAX(p,12))
- 注※
-
開始値と終了値を候補群として決定されたデータ型が,TIMESTAMP WITH TIME ZONE型の場合は,一連の値を格納する列のデータ型もTIMESTAMP WITH TIME ZONE型になります。TIMESTAMP WITHOUT TIME ZONE型の場合は,一連の値を格納する列のデータ型もTIMESTAMP WITHOUT TIME ZONE型になります。
-
-
一連の値を生成する際,引数に指定した値は,結果のデータ型に変換されます。
-
一連の値を生成する際の間隔値の加算処理では,次の四則演算または日時演算が実行されます。
-
開始値が整数データの場合は,次の四則演算が実行されます。
開始値+間隔値の整数定数
-
開始値が日時データまたは文字列定数の場合は,次の日時演算が実行されます。
開始値+間隔値のラベル付き間隔
-
-
開始値または終了値がナル値の場合,空行が返却されます。
-
間隔値が正の値で,かつ「開始値>終了値」の場合,空行が返却されます。
-
間隔値が負の値で,かつ「開始値<終了値」の場合,空行が返却されます。
-
開始値または終了値の値式中に指定する列指定には,次のすべての条件を満たす列だけが指定できます。
-
ADB_GENERATE_SERIES関数を指定した表関数導出表と同じFROM句に指定している表の列である
-
ADB_GENERATE_SERIES関数を指定した表関数導出表とコンマ結合している表の列である
-
ADB_GENERATE_SERIES関数を指定した表関数導出表よりも左側に指定している表の列である
-
結合表の表参照の列ではない
-
同じ表の列である
ただし,開始値または終了値の値式中に副問合せを含む場合,その副問合せ中で指定している列指定には,上記の制限は適用されません。
-
-
開始値または終了値の値式中には,外への参照列を指定できません。
-
ADB_GENERATE_SERIES関数を指定した表関数導出表は,問合せ指定中に1つだけ指定できます。
-
次の2つの表の結果表は,表関数導出表の左側に指定した表の各行に対して,表関数導出表から導出される結果表の各行を組み合わせて連結した行の集合になります。
-
ADB_GENERATE_SERIES関数を指定した表関数導出表の左側に指定した表
-
表関数導出表から導出される結果表
具体的な例を次に示します。
-
(4) 例題
ADB_GENERATE_SERIES関数の指定例を次に示します。
-
開始値と終了値に列指定を含まない例
- 例題1
SELECT "DC1" FROM ADB_GENERATE_SERIES(1,3,1) AS "DT"("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。上記の場合,FROM句の結果(DC1)は次のようになります。
- 例題2
SELECT "DC1" FROM ADB_GENERATE_SERIES(1,1,1) AS "DT"("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。上記の場合,FROM句の結果(DC1)は次のようになります。
- 例題3
-
SELECT "DC1" FROM ADB_GENERATE_SERIES(1,0,1) AS "DT"("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。上記の場合,FROM句の結果(DC1)は空行になります。
- 例題4
SELECT "DC1" FROM ADB_GENERATE_SERIES(DATE'2025-03-01', DATE'2025-03-03', INTERVAL'1 DAY') AS "DT"("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。上記の場合,FROM句の結果(DC1)は次のようになります。
- 例題5
SELECT "DC1" FROM ADB_GENERATE_SERIES(TIMESTAMP'2025-03-01 10:00:00', TIMESTAMP'2025-03-01 11:00:00', INTERVAL'30 MINUTE') AS "DT"("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。上記の場合,FROM句の結果(DC1)は次のようになります。
-
開始値と終了値に列指定を含む例
- 例題
SELECT "T1"."C1","T1"."C2","T2"."DC1" FROM "T1",ADB_GENERATE_SERIES("T1"."C1","T1"."C2",1) AS "T2" ("DC1")下線部分がADB_GENERATE_SERIES関数の指定です。