【问题标题】:Get data for current month from database从数据库中获取当前月份的数据
【发布时间】:2013-12-22 06:18:05
【问题描述】:

我有一个如下所示的表格设置。

表名称:活动。

activity_id , Date       , assign_engr , Task_Type , Task_Status
1           , 2013-12-31 , Sachin      , Monthly   , Scheduled
2           , 2013-12-23 , Mikel       , Weekly    , Done
3           , 2013-10-18 , John        , Monthly   , Done

我只想使用日期字段获取当前月份的数据,如下所示:

select * from activity where Date='current month'

谁能帮我解决这个问题?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以这样尝试:

    select * from activity where MONTH(`Date`)=MONTH(NOW()) 
    and YEAR(`Date`)=YEAR(NOW())
    

    【讨论】:

    • @Basudev:- 不客气。如果对您有帮助,请接受它作为答案!
    • 再次感谢您的帮助。根据我的表格,我可以使用查询获取相应日期的日期名称。请帮帮我。
    • @Basudev,获取日期名称使用DATE_FORMAT(`date`,"%W")查找w3schools.com/sql/func_date_format.asp其他格式
    • @RahulTripathi 你是天才谢谢你节省了我的时间。
    【解决方案2】:

    看来您正在以 MySQL 日期格式存储日期,所以这应该可以工作:

    SELECT * FROM activity
    WHERE date_format(activity.`Date`, '%Y-%m') = date_format(now(), '%Y-%m')
    

    至少我假设您还需要限制年份;否则只检查月份值将得到所有年份的那个月份。

    【讨论】:

    • 谢谢;拉胡尔的回答很好,但只是想澄清这种替代方案是安全的。这样,Basudev 就不必像我们其他人那样艰难地学习:P。
    【解决方案3】:

    这里是 index-friendly 替代方案(假设 date 不包含时间组件,这意味着它的类型为 DATE

    SELECT *
      FROM activity
     WHERE date BETWEEN LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
                    AND LAST_DAY(CURDATE())
    

    注意:

    1. 确保您在 date 列上有索引
    2. 不要将任何函数(例如MONTH()YEAR()...)应用于您正在搜索的列,因为它会使您可能有效地使用的任何索引(索引)无效导致对表进行全面扫描。

    这里是SQLFiddle演示

    【讨论】:

    • 对不起,不,并不总是去工作:2013-02-28 - 1 个月:2013-01-28 + 1 天:2013-01-29;休息 3 天(29 日、30 日、31 日)。要获得月初,请减去当天 - 1。您还应该避免使用BETWEEN,而是使用独占上限(即小于下个月的开始),这将允许无论date 是否有时间组件,查询都可以工作。但是,是的,这种基本方法允许使用索引。
    • @Clockwork-Muse 感谢您的输入 :)。当然应该是+1day -1month。这是一个错字。晚上回复太晚了。现在使用 BETWEEN 是一个偏好问题,只要它在没有时间组件的情况下使用。
    • ...为什么不在那种情况下(使用时间组件)确保安全,这不需要更多的努力?
    • @Clockwork-Muse 你已经指出了。我想我之前说过,如果应用得当,这是一个偏好问题。我回答的重点是关于完全不同且非常重要的问题 - 获得索引支持。现在从我看到的情况来看,您的答案在这一点上并不像人们想象的那么一致(例如stackoverflow.com/a/7112446/1920232stackoverflow.com/a/10356338/1920232)。但是再次谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2017-01-01
    • 2011-09-03
    • 2021-12-01
    相关资源
    最近更新 更多