根据列的值更改DATE_ADD的单位

时间:2015-05-22 15:17:20

标签: mysql

我有一个存储datetime操作last_run的表,我还有一个frequency列,这是操作应该运行的频率(以月为单位)。< / p>

+----+---------------------+-----------+
| id | last_run            | frequency |
+----+---------------------+-----------+
| 1  | 2014-05-22 00:00:00 |    12     |
|----|---------------------|-----------|
| 2  | 2015-05-15 00:00:00 |   0.25    |
+----+---------------------+-----------+

我使用以下查询来获取下次运行操作的日期:

SELECT DATE_ADD(last_run, INTERVAL frequency MONTH) AS next_run FROM table;

由于next_run值,无法在第二条记录上返回正确的frequency日期。

是否可以在frequency = 0.25

时添加条件
  • frequency变为7
  • MONTH变为DAY

这是我目前正在重构的旧系统的一部分。是否更好地存储间隔类型(DAY/MONTH/YEAR),并将其传递给查询,还是有办法将上述条件添加到查询中?

1 个答案:

答案 0 :(得分:1)

我认为你必须使用一个很大的case语句。像这样:

select (case when frequency >= 1
             then DATE_ADD(last_run, INTERVAL frequency MONTH)
             when frequency < 1
             then DATE_ADD(last_run, INTERVAL frequency*28 DAY)
             ELSE DATE_ADD(last_run, INTERVAL 1 MONTH) --Adding for may be null values
        end)