Вопрос

Как мне сделать что-то вроде следующего

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

... где столбец t_invoice.last_bill_date - это дата, t_invoice.interval - это целое число и t_invoice.interval_unit - это строка.

Что мне нравится в функции Adddate (), это то, что если я напишу

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

Это удобно возвращает последний день февраля - 2010-02-28. Таким образом, он знает, что 1 месяц означает 28 дней для февраля (29 на скачковом году), 31, если нечетное число месяцев, 30, если даже месяц месяц. Я хотел бы сохранить эту функцию в моем запросе.

По сути, я хочу определить следующий срок счета человека, основанный на желаемой частоте выставления счетов. Есть ли лучший способ добиться этого?

Это было полезно?

Решение

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

ИЛИ

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top