質問: 31 AND sum_year >= 2010 AND sum_year <= (2010 + INTERVAL '2' YEAR) ; ``` 指定した日付から指定した期間のみのデータをとってきたいです INTERVALを使って書きたいのですがエラーがでて何が間違いなのかがわかりません キャストが必要とかなのでしょうか? 上のものでは2010/10/31から2年間分のデータをとってこようとしてます アドバイスよろしくお願いいたします。 エラーーメッセージ ERROR: 演算子が存在しません: integer + interval SQLステート:42883 ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません 文字:169 追記 みなさまありがとうございます 同じ具合で何か月後、何日後はsum_dateを使うべきでしょうか? 月と日が32日以降13月以降がないため単純に足してはいけないのはわかるのですが...
回答: sum_dateを使う場合はbetweenが簡単で良いと思います。 ``` SELECT sum_year as T_DATE ,user_cnt as M_NO FROM t_sumlist WHERE sum_date between '2010-10-31' and (date '2016-10-31' + INTERVAL '2 YEAR')::date; ``` 追記を受けて ======= 日付の計算は型がdateやtimestampなど決まっていれば、正しく指定すればプログラム側が上手いことやってくれます(特異な場合はある程度調整が必要ですが) date型でデータをおさめているのであればdate型を使った方がすっきり組めることが多いと思いますよ。 ``` -- 3ヶ月間 WHERE sum_date between '2010-10-31' and (date '2016-10-31' + INTERVAL '3 MONTH')::date; -- 10日間 WHERE sum_date between '2010-10-31' and (date '2016-10-31' + INTERVAL '10 DAYS')::date; ```