2013-10-31 86 views
0

我被困在尝试使用某些sql来确定日期是否在90,60或30天内。我认为我很接近,但无法正常工作。我有一个名为boosterDate的列,它是MySQL中的一个日期。我希望检查该列是否在距离DATE(Now())90,60或30天内,然后将列增强器在天数设置为90,60或30天。表名是服务。在MySQL中使用CASE比较日期

这里是我到目前为止:

$sql = "SELECT 
    CASE WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()),INTERVAL 90 DAY) THEN 90 
    WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()),INTERVAL 60 DAY) THEN 60 
    WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()),INTERVAL 30 DAY) THEN 30 
    ELSE NULL END FROM service;"; 

回答

3

这是您的查询:

SELECT (CASE WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 90 DAY) THEN 90 
      WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 60 DAY) THEN 60 
      WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 30 DAY) THEN 30 
      ELSE NULL 
     END) 
FROM service 

我的猜测是,你的问题是,这总是返回90.简单的原因是,当第二和第三个条件成立时,第一个也是如此。 case语句停止在第一个匹配的语句。

因此,扭转条件:

SELECT (CASE WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 30 DAY) THEN 30 
      WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 60 DAY) THEN 60 
      WHEN DATE(boosterDate) < ADDDATE(DATE(NOW()), INTERVAL 90 DAY) THEN 90 
      ELSE NULL 
     END) 
FROM service 
+0

我得到那么列boosterWithinDays要么是90,60或30天,虽然怎么办。所以我需要通过boosterDate循环,找到日期是在30,60或90天内,然后将另一列设置为30,60或90. – ndjustin20

+0

@ ndjustin20。 。 。这是第二个查询所做的。 –

+0

不错的答案,这里是证明:http://sqlfiddle.com/#!2/4eb4c8/2 – CodeZombie