アプリ版:「スタンプのみでお礼する」機能のリリースについて

本日から○日以内のレコードをセレクトしたいのですが
○日の部分が可変のためJavaのpreparedstatementを使用します。

例)
SELECT timedate FROM testtb WHERE timedate BETWEEN current_timestamp + '-30days' AND current_timestamp;
※timedateはDATE型です

のような事をしたいのですが、
「30」の部分を?にすると
The column index is out of range: 1, number of columns: 0エラーになります。

intervalの使用も考え色々調べていたのですが、いまいちやり方が分かりません。
何か方法をご存知の方、ご教授お願い致します。

A 回答 (2件)

timedateはDATE型ということでしたら、整数の加減算は日単位なので、


SELECT timedate FROM testtb WHERE
timedate BETWEEN current_date - ? AND current_date;
ではいかがでしょうか。

参考までに、TIMESTAMP型の場合には
SELECT timedate FROM testtb WHERE
timedate BETWEEN current_timestamp - (? * interval '1days') AND current_timestamp;
のような書き方ができます。

参考URL:http://www.postgresql.jp/document/current/html/f …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
「整数の加算」という認識が抜けていましたため勉強不足でした事と
current_dateを使用した事がなく思いつきませんでした。
可変部をint型に置き換えた上で上記方法で実装できました。
大変助かりました、参考URLまでご提供いただきありがとうございました。

お礼日時:2011/03/29 12:27

亀レスですが。


ps = conn.prepareStatement("SELECT timedate FROM testtb WHERE timedate BETWEEN current_timestamp + cast ( ? as interval ) AND current_timestamp");
ps.setString(1,"-30 days");

8..4だったらいけました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
interval、castの使用方法もご教授いただき大変参考になりました。
精進いたします。

お礼日時:2011/03/29 12:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!