我一直在尝试使用一些 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;";
Run Code Online (Sandbox Code Playgroud)
这是您的查询:
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
Run Code Online (Sandbox Code Playgroud)
我的猜测是你的问题是这总是返回 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
Run Code Online (Sandbox Code Playgroud)