【问题标题】:MySQL Select First Day of Year and MonthMySQL选择年和月的第一天
【发布时间】:2013-08-27 01:08: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() ) 

【问题讨论】:

    标签: mysql sql date select


    【解决方案1】:

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

    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)
    

    5 月 1 日是一年中的第 121 天。但是这种方法在闰年是行不通的。

    闰年证明版本是:

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

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

    【讨论】:

    • SELECT MAKEDATE(year(now()),1);看起来比接受的答案更干净。
    【解决方案2】:

    我认为你需要:

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

    说实话,你可以这样做:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        where `DATE` >= CONCAT(YEAR(NOW()),'-01-01')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-29
          • 1970-01-01
          • 2015-07-09
          • 2020-07-11
          • 2012-08-02
          • 2021-10-24
          • 2016-01-01
          • 1970-01-01
          相关资源
          最近更新 更多