Question

Comment puis-je faire quelque chose comme ce qui suit

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

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

Ce que je 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 le mois de nombre impair, 30 si même mois numéro. Je voudrais conserver cette fonctionnalité dans ma requête.

En fait, je veux déterminer la prochaine date de facturation d'une personne en fonction de sa fréquence de facturation souhaitée. Y at-il une meilleure façon d'y parvenir?

Était-ce utile?

La solution

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top