1

我有许多带有日期时间记录的 MySQL 记录。假设它们在一个名为 my_table 的表中,它们包含以下记录。

ID       Date
1       2021-04-02
2       2020-04-13
3       2019-04-29
4       2018-04-30
5       2019-06-24

我想获取所有记录:

  1. 月份是四月 (4)
  2. 年份小于当前年份 2021
  3. 日期小于当前日期(发布日期为 24 日)。

我能够整理出月份和年份部分:

SELECT * FROM my_table where date LIKE '%-4-%' AND date < '2021-04-01 00:00:00';

这将为我提供 4 月内不在当前 4 月的所有记录。但是,它也会给我 4 月内的所有记录,即使它们大于 24 日当天。

2       2020-04-13
3       2019-04-29
4       2018-04-31

我希望它返回的是 4 月份内的所有往年记录,但天数小于或等于当前日期/时间。在这种情况下,返回的记录应该是:

2       2020-04-13

是否可以在一个查询中执行此操作?

4

2 回答 2

1

使用函数DAY()MONTH()YEAR()在您的条件下:

SELECT * 
FROM my_table 
WHERE MONTH(date) = MONTH(CURRENT_DATE)
  AND YEAR(date) < YEAR(CURRENT_DATE) 
  AND DAY(date) < DAY(CURRENT_DATE);

请参阅演示

于 2021-04-24T17:49:14.517 回答
1

这应该做你想要的:

SELECT  *
FROM `my_table`
WHERE MONTH(`date`) = 4 AND 
 YEAR(`date`) < YEAR(NOW()) 
 AND DAY(`date`) < DAY(NOW()) 
于 2021-04-24T17:52:03.720 回答