MySql从当前日期选择提前1周和1个月的日期

时间:2020-02-24 04:29:16

标签: mysql date timestamp

我想获取将在一周或一个月内到期的日期列表... MySQL,字段为TIMESTAMP。

我尝试了以下查询...

SELECT CERT_ID,日期(CERTVALIDITY) FROM mst_CERT WHERE date(CERTVALIDITY)> now()-间隔1周ORDER BY CERTVALIDITY;

这将从当前日期返回所有日期

从mst_CERT中选择日期(CERTVALIDITY),其中curdate()= DATE(DATE_SUB(CERTVALIDITY,INTERVAL 1周));

什么也不返回...

从mst_CERT中选择日期(DATE_SUB(CERTVALIDITY,间隔1个月));

什么也不返回...

| CT00078      | 2020-02-28  |
| CT00098      | 2020-02-29  |
| CT00011      | 2020-03-31  |
| CT00012      | 2020-03-31  |
| CT00013      | 2020-03-31  |
| CT00014      | 2020-03-31  |
| CT00075      | 2020-03-31  |
| CT00055      | 2020-03-31  |
| CT00056      | 2021-03-31  |

2 个答案:

答案 0 :(得分:1)

这将显示7天期限以外的CERT_ID。

SELECT      CERT_ID, date(CERTVALIDITY) 
FROM        mst_CERT 
WHERE       date(CERTVALIDITY) > (NOW() + INTERVAL 7 day) 
ORDER BY    date(CERTVALIDITY);

这将为您显示7天之内的有效CERT_ID。

SELECT      CERT_ID, date(CERTVALIDITY) 
FROM        mst_CERT 
WHERE       date(CERTVALIDITY) BETWEEN NOW() AND (NOW() + INTERVAL 7 day) 
ORDER BY    date(CERTVALIDITY);

答案 1 :(得分:1)

您的第一个查询几乎是正确的。您错误地减去了1周的间隔,但实际上必须增加间隔。

SELECT CERT_ID, DATE(CERTVALIDITY) 
FROM ms_CERT 
WHERE DATE(CERTVALIDITY) < NOW() + INTERVAL 1 WEEK AND DATE(CERTVALIDITY) > NOW()
ORDER BY CERTVALIDITY;

以上查询将返回以下结果

| CT00078      | 2020-02-28  |
| CT00098      | 2020-02-29  |