使用CASE比较MySQL中的日期

时间:2013-10-31 01:58:30

标签: php mysql sql

我一直试图用一些sql来判断日期是在90,60还是30天之内。我想我很接近,但无法让它正常工作。我有一个名为boosterDate的列,它是MySQL中的一个日期。我希望检查该列是否在DATE(Now())的90,60或30天内,然后将boosterWithinDays列设置为90,60或30天。表名是服务。

这是我到目前为止的地方:

$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;";

1 个答案:

答案 0 :(得分: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