MySql выберите 1 неделю и 1 месяц вперед от текущей даты - PullRequest
0 голосов
/ 24 февраля 2020

я хочу получить список дат, срок действия которых истекает через неделю или месяц ... MySQL, а поле - TIMESTAMP.

я пробовал ниже запросов ...

ВЫБРАТЬ CERT_ID, дату (CERTVALIDITY) ОТ mst_CERT WHERE дата (CERTVALIDITY)> now () - интервал 1 неделя ORDER BY CERTVALIDITY;

Возвращает все даты с текущей даты

ВЫБРАТЬ дату (CERTVALIDITY) из mst_CERT, где curdate () = DATE (DATE_SUB (CERTVALIDITY, INTERVAL 1 week));

ничего не возвращает ...

ВЫБРАТЬ дату (DATE_SUB (CERTVALIDITY, INTERVAL 1 MONTH)) из mst_CERT;

ничего не возвращает ...

| 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 ]

1 голос
/ 24 февраля 2020

Ваш первый запрос почти верен. Вы сделали ошибку, вычтя интервал в 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  |
1 голос
/ 24 февраля 2020

Это покажет CERT_ID вне 7-дневного периода.

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

Это покажет вам действительные CERT_ID в течение 7 дней.

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