-1

次のようなことをするにはどうすればよいですか

SELECT ADDDATE(t_invoice.last_bill_date, INTERVAL t_invoice.interval t_invoice.interval_unit) 
  FROM t_invoice

...列 t_invoice.last_bill_date は日付、t_invoice.interval は整数、t_invoice.interval_unit は文字列です。

ADDDATE() 関数について私が気に入っているのは、

SELECT ADDDATE('2010-01-31', INTERVAL 1 MONTH)

便利なことに、2 月の最終日である 2010-02-28 が返されます。したがって、1 MONTH は 2 月は 28 日 (うるう年は 29 日)、奇数月は 31 日、偶数月は 30 日を意味することがわかります。クエリでこの機能を保持したいと思います。

基本的に、希望する請求頻度に基づいて、次の請求日を決定したいと考えています。これを達成するためのより良い方法はありますか?

4

1 に答える 1

2
SELECT t_invoice.last_bill_date +  INTERVAL 
   CASE t_invoice.interval_unit 
    WHEN 'minute' THEN t_invoice.interval 
    WHEN 'hour' THEN t_invoice.interval*60
    WHEN // etc...
    END MINUTE as col1
 FROM t_invoice

また

SELECT 
   CASE t_invoice.interval_unit 
    WHEN 'minute' THEN t_invoice.last_bill_date +  INTERVAL t_invoice.interval MINUTE
    WHEN 'hour' THEN t_invoice.last_bill_date +  INTERVAL t_invoice.interval HOUR
    WHEN // etc...
    END as col1
 FROM t_invoice
于 2010-06-16T23:35:43.750 に答える