• ベストアンサー

3ヶ月以内としたい場合

ある取得した年月日足す3ヶ月以内のもの取得したいのですが、現在考えているのが ある取得した年月日:20040901 とあった場合、年月日を各々取得して 月(09)に+3した値を取得します。 +3した値は12よりも大きくないので、 20041201としてSQLにいれようとしています。 SQL側で+3として簡単に月を足すことができるものはないでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんにちは。 >>実際にDBに入っている値は、2004/10/01という形です。 うーん、これがくさいですね・・・。 MySQLなので、 2004-10-01 2004.10.01 20041001 の3種類だけだったんじゃ・・・? 結果、日付に変換できずにNULLになり、「<=」で判断できないのではないでしょうか。 ちなみに「term_a」のところに、直接「2004-12-20」としたら取れますか? やっぱり自信ないですね・・・。 (^^ゞ

aiurai54
質問者

お礼

select (TO_TIMESTAMP(term_a, 'YYYYMMDD')+ '3 months') from テーブル名 として表示すると、、、 2004-10-01 2004-10-01 2004-10-01 2004-10-01 2004-10-01 となったので、 select (TO_TIMESTAMP(term_a, 'YYYY-MM-DD')+ '3 months') from テーブル名 とすると、3ヶ月後の日付を取得でき、うまく表示することができました。ながながとありがとうございました。

その他の回答 (3)

回答No.3

こんにちは。 全然自信なしですが(すみません・・・)、 1.とりあえずnow()がすでに日付型なので、TO_DATE()はおかしいです。 2.同様に、term_aの型は何でしょう? 3.型の問題でなければ、下記をお試しください。 A.term_aが日付型 AND term_a <= CURRENT_TIMESTAMP + '-3 months' B.term_aが日付型じゃない AND TO_TIMESTAMP(term_a, 'YYYYMMDD') <= CURRENT_TIMESTAMP + '-3 months' 試す環境がないのでエラーかも・・・。 (^^ゞ

aiurai54
質問者

お礼

同じようにterm_aに+3ヶ月した値が今日の日付よりとしたのですが、、、 TO_TIMESTAMP(term_a, 'YYYYMMDD') + '3 months' >= CURRENT_TIMESTAMP どうやら、2004/10/01となっているものなど、ちょうど年数が繰り上がるときにはうまくいきません。

aiurai54
質問者

補足

ほんとにいろいとと教えていただきありがとうございます。 term_aはvarchar型です。実際にDBに入っている値は 2004/10/01という形です。 後者のSQLを試してみたのですが、エラーにはならないのですが、実際に3ヶ月以内のものを取得することができませんでした。。

回答No.2

こんばんは。 ごめんなさい、ありましたね。 SELECT TO_DATE('20040901', 'YYYYMMDD') + '3 months' かな? (^^ゞ

aiurai54
質問者

補足

同じようにやっているつもりなのですが。。。 今までのSQLに下記を追加しました。 and (to_date(term_a,'YYYY-MM-DD') + '3 months' <= to_date(now(),'YYYY-MM-DD')) ところが PostgreSQL Error: 1 (ERROR: operator is not unique: date + "unknown" ) Session halted. とエラーになってしまいました。。。

回答No.1

こんにちは。 ADD_MONTH()が使えないので、普通に計算するしかないですね・・・。 日付型に変換してから足し算するという手もありますが、 SELECT TO_DATE('20040901', 'MM') + 3 これで12月(繰り上げは自動)が取れますが、年と日がね・・・。 どうでしょう・・・? (^^ゞ

関連するQ&A