TOP書籍連動> MONTHS_BETWEEN(date1,date2)
まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第8回:ファンクションの移行(2)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/11/25
1   2  次のページ
MONTHS_BETWEEN(date1,date2)

   今回は、日付けに関するファンクションと列の値を返すファンクションについて紹介します。

   MONTHS_BETWEENは、指定された日付date1からdate2までの月数を求める関数です(図13)。
SELECT MONTHS_BETWEEN('2003/03/15',
  '2002/02/20') FROM DUAL;

MONTHS_BETWEEN('2003/03/15','2002/02/20')
-----------------------------------------
                               12.8387097

SELECT MONTHS_BETWEEN('2003/03/20',
  '2002/02/20') FROM DUAL;

MONTHS_BETWEEN('2003/03/20','2002/02/20')
-----------------------------------------
                                       13

図13:OracleでのMONTHS_BETWEEN関数の実行結果

   次のコードは、その結果を得るためのストアドファンクションです。

CREATE FUNCTION MONTHS_BETWEEN(DATE,DATE)
  RETURNS NUMERIC AS
'SELECT to_number((date($1)-date($2)),
                  ''999999999'')/31 '
LANGUAGE 'sql';
   結果は、以下のとおりです。

PostgreSQLでのMONTHS_BETWEEN関数の実行結果
SELECT MONTHS_BETWEEN('2003/03/15','2002/02/20');

 months_between
----------------
  12.5161290323
(1 row)

SELECT MONTHS_BETWEEN('2003/03/20','2002/02/20');

 months_between
----------------
  12.6774193548
(1 row)
   実行例のように、計算結果に誤差が出る場合もあります。これについてはアプリケーション側で対応するなどの対処が必要です。


NEXT_DAY(date,string)

   NEXT_DAYは指定された日付dateから出発してstringで指定された曜日の次の日付を求める関数です。

   PostgreSQLではリスト7のようなストアドプロシージャで対応します。ただし、与えるパラメータは日本語だけとは限りませんので各国に合わせた処理が必要になります。ここでは日本語だけに対応することとします。

PostgreSQLのNEXT_DAY関数の作成
リスト7:PostgreSQLのNEXT_DAY関数の作成
(画像をクリックすると別ウィンドウに拡大表示します)

   ストアドプロシージャを再定義する場合には、次のように一度ドロップする必要がありますので注意してください。

DROP FUNCTION next_day(date,char);
DROP FUNCTION next_day(date,int);
   Oracleでの実行結果を見てみましょう。

SQL> SELECT NEXT_DAY('2003/2/11','日') FROM DUAL;

 NEXT_DAY
 --------
 03-02-16
   PostgreSQLで作成されたNEXT_DAY関数の結果は次のとおりです。Oracleの例と比べてください。

# SELECT next_day('2003/2/11','日');
  next_day
------------
 2003-02-16
(1 row)
1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第8回:ファンクションの移行(2)
MONTHS_BETWEEN(date1,date2)
  DECODE関数