- 締切済み
日付演算で月を加算したい場合
日付演算で月を加算したい場合 例として、下記構成で顧客訪問日に所定の月数を加算して、次回の訪問予定日を表示したいです。 データベース1 テーブル1 = 主キー:顧客番号(int),訪問日(date) INTERVALを使えばいいのでしょうか? また顧客ごとに訪問間隔が違うのですが、その場合どうしたらいいでしょうか? SQL例をご教示いただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- taka451213
- ベストアンサー率47% (436/922)
こんばんは 訪問間隔月数はintでいいです。 ただ一つだけ注意が必要ですが、INTERVALで月を足した場合、月末が自動調整されます。 例えば、訪問日=2010-3-31 訪問間隔月数=1で計算すると、次回訪問日=2010-4-30になります。 (4月31日は存在しないので・・・) これでよければ、 SELECT 顧客番号, 訪問日 + INTERVAL テーブル2.訪問間隔月数 month FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.顧客番号 = テーブル2.顧客番号 になります。
- yambejp
- ベストアンサー率51% (3827/7415)
>所定の月数を加算して たしかにintervalで可能ですが、月というのは長さが不定であり、月末日の調整なども 必要になるので、単純にintervalするのは運用上危険です。 また、訪問日ということですので、祝日などの例外処理も必要になると思います。 ロジックをきっちり固めるところからはじめてください >次回の訪問予定日 正確にやりたいなら自動計算などさせず、数か月~数年分のスケジュールを あらかじめいれておくことです。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは >INTERVALを使えばいいのでしょうか? はい。 それでいいです。 >また顧客ごとに訪問間隔が違うのですが・・・ それはどこかのテーブルに入ってるんですか? その場合はJOINして、INTERVALに該当カラムをくっつければいいです。 そうじゃない場合は・・・、厄介ですね。
お礼
>また顧客ごとに訪問間隔が違うのですが・・・ それはどこかのテーブルに入ってるんですか? その場合はJOINして、INTERVALに該当カラムをくっつければいいです。 ありがとうございます。 新たにテーブル2をデータベース1に追加しようと思います。 テーブル2 = 主キー:顧客番号(int),訪問間隔月数(int?) この場合だと訪問間隔月数はintで問題ないでしょうか? intで大丈夫なら、恐縮ですがSQL例をご教示頂けないでしょうか? よろしくお願いします。