Pregunta

¿Cómo puedo hacer algo como lo siguiente

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

... donde el t_invoice.last_bill_date columna es una fecha, t_invoice.interval es un entero y t_invoice.interval_unit es una cadena.

Lo que me gusta de la función ADDDATE () es que si escribo un

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

Es conveniente devuelve el último día de febrero - 2010-02-28. Por lo que sabe que 1 MES significa 28 días de mar (29) en año bisiesto, 31 meses si es impar, 30 si un número par meses. Me gustaría conservar esta característica en mi consulta.

Básicamente, quiero para determinar la próxima fecha de facturación de una persona basándose en su frecuencia de facturación deseada. ¿Hay una mejor manera de lograr esto?

¿Fue útil?

Solución

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

o

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top