2010-06-16 61 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