Mysql ADDDATE()或DATE_ADD()与表列?

时间:2010-06-16 23:28:04

标签: mysql sql-date-functions

如何执行以下操作

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月份意味着2月份28天(闰年29天),如果是奇数月份则是31天,如果是偶数月份则是30天。我想在我的查询中保留此功能。

基本上,我想根据他想要的结算频率确定一个人的下一个账单日期。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

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

OR

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