かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

連続値生成関数generate_series

time 2018/01/12

連続値生成関数generate_series

本記事では、PostgreSQLの連続値生成関数であるgenerate_seriesの基本的な使い方について、まとめました。

応用すれば、大量データを作成が容易になります。まずは、その基本をしっかりとおさえましょう。

sponsored link

generate_seriesとは

generate_seriesとは、集合を返す関数の一つで連続値を生成する関数です。

大きな利点は、同時に接続される複数のセッション間でも、一意の値を容易に生成できる点です。これは、コミットやロールバックに影響せずに、順序から整数を取得した段階で、順序がカウントアップ(またはカウントダウン)されるためです。

使用方法

文法
①generate_series(start[数値型], stop[数値型], step[数値型])
※step[数値型]は省略可能。省略した場合は1と指定した場合と同義
②generate_series(start[timestamp型], stop[timestamp型], step[interval型])

戻り値
引数のstartやstopと同じ型

説明
startからstopまで、step刻みで連続する値を生成する
stepにはマイナス値を指定することも可能、ただしその場合はstart > stopの値を指定する必要がある

備考
使用する際は、以下のいずれか
①SELECT * FROM generate_series(1,10);
②SELECT generate_series(1,10);

具体例

注意点

数値型を引数に指定する場合で、stepに0を指定するとエラーになります。

stepに正の値を指定し、start>stopとなるような値を指定した場合、結果が0件となります。
またその逆で、stepに負の値を指定し、start

ちょっとした応用

generate_seriesで生成した値を利用して計算して出力したり、生成した値を使わずに定数等を出力(行を生成するという機能だけを利用)したりすることも可能です。

関連

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link