Domanda

Come faccio a fare qualcosa di simile al seguente

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

... dove la t_invoice.last_bill_date colonna è una data, t_invoice.interval è un intero e t_invoice.interval_unit è una stringa.

Quello che mi piace la funzione ADDDATE () è che se scrivo un

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

Si ritorna comodamente l'ultimo giorno di febbraio - 2010-02-28. Quindi sa che 1 MESE significa 28 giorni per febbraio (29 su anno bisestile), 31 se dispari numero del mese, il 30 se numero pari mese. Vorrei conservare questa funzione nella mia interrogazione.

In sostanza, voglio stabilire data di fatturazione successiva di una persona in base alla sua frequenza di fatturazione desiderato. C'è un modo migliore per raggiungere questo obiettivo?

È stato utile?

Soluzione

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top