Frage

Wie mache ich so etwas wie die folgenden

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

... wo die Spalte t_invoice.last_bill_date ein Datum ist, t_invoice.interval eine ganze Zahl und t_invoice.interval_unit ist eine Zeichenfolge.

Was ich mag über die ADDDATE () Funktion ist, dass, wenn ich schreibe ein

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

Es gibt bequem den letzten Tag des Monats Februar - 2010-02-28. So ist es weiß, dass 1 Monat 28 Tage für Februar (29 auf Schaltjahr), 31, wenn ungeradee Anzahl Monat, 30, wenn gerade Zahl Monat. Ich mag diese Funktion in meiner Anfrage erhalten.

Im Grunde möchte ich auf der Grundlage seiner gewünschten Abrechnungsfrequenz einer Person nächsten Rechnungsdatum bestimmen. Gibt es einen besseren Weg, um dies?

zu erreichen
War es hilfreich?

Lösung

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

oder

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top