2010-06-16 8 views
0

Comment puis-je faire quelque chose comme ce qui suitMysql ADDDATE() ou DATE_ADD() avec des colonnes de table?

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

... où la colonne t_invoice.last_bill_date est une date, t_invoice.interval est un entier et t_invoice.interval_unit est une chaîne.

Ce que j'aime la fonction AddDate() est que si j'écris un

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

Il retourne facilement le dernier jour de Février - 2010-02-28. Donc, il sait que 1 mois signifie 28 jours pour février (29 sur l'année bissextile), 31 si mois impair nombre, 30 si le nombre pair mois. Je souhaite conserver cette fonctionnalité dans ma requête. Fondamentalement, je veux déterminer la prochaine date de facturation d'une personne en fonction de sa fréquence de facturation souhaitée. Y a-t-il un meilleur moyen d'y parvenir?

+1

Est-ce que le travail de recherche pour vous? – Senseful

Répondre

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 

OU

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

Lorsque je fais un SELECT DATEADD ('2010-01-30', INTERVAL 1 MOIS), il me donne commodément le dernier jour de Février - 2010-02-28. Existe-t-il un moyen facile de modifier votre requête pour la prendre en charge? – John

+0

@John: Vous voulez dire 1 mois devrait être interprété comme 30 jours? – Senseful

+0

@eagle - 30 jours si Avril, Juin etc ... 31 jours si Jan, Mars, Mai, Juillet etc. 28 jours ou 29 jours de février – John

Questions connexes