Pergunta

Como faço algo como o seguinte

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

... onde a coluna t_invoice.last_bill_date é uma data, t_invoice.interval é um número inteiro e t_invoice.interval_unit é uma string.

O que eu gosto na função adddate () é que, se eu escrever um

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

Retorna convenientemente o último dia de fevereiro-2010-02-28. Portanto, sabe que 1 mês significa 28 dias para fevereiro (29 no ano bissexto), 31 Se o mês ímpar mês, 30, se o número número do número. Eu gostaria de preservar esse recurso em minha consulta.

Basicamente, quero determinar a próxima data de fatura de uma pessoa com base na frequência de cobrança desejada. Existe uma maneira melhor de conseguir isso?

Foi útil?

Solução

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top