[pgsql-jp: 33201] Re: 日付の演算について

Shu Sawada luna @ lunanet.gr.jp
2004年 6月 11日 (金) 01:45:56 JST


さわだと申します。
ちょうど関数お勉強中だったので、試しに作ってみました。

#SQLだけで出来る話だったら、ごめんなさい。

こんなテーブルを作って、

luna=> select * from test;
 no |    date    |   time   | param 
----+------------+----------+-------
  1 | 2004-06-11 | 00:30:00 |    30
  2 | 2004-06-11 | 01:00:00 |    60
  3 | 2004-06-11 | 02:00:00 |    60
  4 | 2004-06-10 | 00:00:00 |    45
  5 | 2004-06-11 | 03:00:00 |    30
(5 rows)


こんな関数を作ってみました。

luna=> create function learn(int, int) returns setof int as '
luna'> select no from test where no = $2 and time >= (time \'now\' + interval \' $1 minutes \')'
luna-> language 'sql';

luna=> select learn(t.param, t.no) from test as t where date = 'now';
 learn 
-------
     3
     5
(2 rows)

このままだと、現在時刻+param分以降に送信時刻が設定されている行が
全て出てきてしまうので、ぴったり1行は抽出できないと思います。
確実に30分おきに実行されるとしても、数秒単位のズレが出てくると思うので、
単純に = では抽出できないような。
プログラム側で対応できれば、もっと簡単な気もします。

こういう話じゃなかったら、ごめんなさい。
もっと美しい解があっても、ごめんなさい。少しでも参考になれば。^^;

------
luna as Shu Sawada  [ luna @ lunanet.gr.jp  http://www.lunanet.gr.jp ]




pgsql-jp メーリングリストの案内