2013-12-22 65 views
3

我有一个表格设置,如下所示。从数据库中获取当前月份的数据

表名:活动。

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' 

谁能帮我这个查询?

回答

6

你可以试试这样:

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

多谢了.......... – Basudev

+0

@Basudev: - 欢迎您。如果这对你有帮助,请接受它作为答案! –

+0

再次感谢您的帮助。根据我的表,我可以使用查询获取相应日期的日期名称。请帮帮我。 – Basudev

1

看来你存储在MySQL的日期格式的日期,所以这应该工作:

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

您需要限制到一年为好,我至少在假设;否则只是检查月份值将在所有年份获得该月份。

+0

年好电话 – reformed

+1

谢谢;拉胡尔的回答很好,但只是想澄清替代方案是安全的。这样,Basudev就不必像我们其他人一样学习艰难的方式:P。 –

-1

这里是指数友好替代(假设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演示

+0

对不起,不总是会上班的:'2013-02-28' - 1个月:'2013-01-28' + 1天:'2013-01-29'; 3天(29日,30日,31日)关闭。为了获得月份的开始,减去当前日期 - 1.您还应该避免使用“BETWEEN”,以支持独占的上限(即小于下个月的开始),这将允许无论“日期”是否具有时间分量,查询都可以工作。但是,是的,这种基本的方法允许使用指数。 –

+0

@ Clockwork-Muse感谢您的输入:)。当然应该是+ 1天-1个月。这是一个错字。我在晚上回答太晚了。现在使用BETWEEN是一个偏好问题,只要它没有时间组件就可以使用。 – peterm

+0

...为什么不为这种情况安全(带时间分量),这不需要花费太多的努力? –

相关问题