15

如何在 SELECT 中找到一年中的第一天?

SELECT `DATE`,`SomeValue1`,`SomeValue2`
FROM `SomeTableName`
WHERE (`DATE` >= [...first day of the year in date format...])

我发现了这个月 - 但我对一年的把握不够:(我正在寻找这个单独的查询来查找月初和现在之间的数据)

WHERE (`DATE` between  DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() ) 
4

4 回答 4

29

要获得当年的第一天,我使用:

SELECT MAKEDATE(year(now()),1);

所以在你的查询中你会写:

where `date` >= MAKEDATE(year(now()),1)

我通常会做过去整整 2 年的销售报告之类的事情,但我总是想从年初开始。因此显示 2 整年和迄今为止的年份。

where date>= MAKEDATE(year(now()-interval 2 year),1)

但更复杂的是,我们的财政年度从 5 月 1 日开始。我总是想从五月一日开始。

where date >= MAKEDATE(year(now()-interval 2 year),1) + interval 120 day

或作为替代

where date >= MAKEDATE(year(now()-interval 2 year),121)

五月一日是一年中的第 121 天。但这种方法在闰年不起作用。

闰年证明版本是:

where date => select MAKEDATE(year(now()-interval 5 year),1) + interval 4 month

无论是否闰年,它总是会返回 xxxx-05-01 日期。

于 2014-08-06T14:03:00.973 回答
28

我认为你需要:

WHERE (`DATE` between  DATE_FORMAT(NOW() ,'%Y-01-01') AND NOW() ) 

老实说,你可以这样做:

WHERE (`DATE` between  DATE_FORMAT(NOW() ,'%Y') AND NOW() ) 
于 2013-08-23T21:19:23.527 回答
5

如果上述方法适用于当月,那么这将适用于全年:

WHERE (`DATE` between  DATE_FORMAT(NOW() ,'%Y-01-01') AND NOW() ) 
于 2013-08-23T21:19:07.073 回答
0

不知道为什么,但在我浏览 300 万时。记录最快的方法是:

where `DATE` >= CONCAT(YEAR(NOW()),'-01-01')
于 2020-06-22T14:54:29.813 回答