2010-06-16 70 views
0

我怎样做类似如下有表列的Mysql ADDDATE()或DATE_ADD()吗?

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) 

它方便地返回二月的最后一天 - 2010-02-28。因此,它知道1月是指2月28日(闰年29日),如果是奇数月份则为31日,如果是偶数月份则为30日。我想在我的查询中保留这个功能。

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

+1

是否为您的查询工作? – Senseful 2010-06-16 23:34:05

回答

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 
+0

当我做一个SELECT DATEADD('2010-01-30',INTERVAL 1 MONTH)时,它会方便地给我2月 - 2010年2月28日的最后一天。有没有简单的方法来修改你的查询来支持它? – John 2010-06-16 23:37:36

+0

@John:你的意思是1个月应该解释为30天? – Senseful 2010-06-16 23:39:26

+0

@鹰 - 如果四月,六月等30天;如果一月,三月,五月,七月等31天。二月的28天或29天 – John 2010-06-16 23:41:21