2013-12-22 67 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

...爲什麼不爲這種情況安全(帶時間分量),這不需要花費太多的努力? –

相關問題