2

我一直在尝试使用一些 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;";
4

1 回答 1

6

这是您的查询:

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
于 2013-10-31T02:09:32.300 回答