2013-05-11 96 views
9

我有一個名爲date的TIMESTAMP字段的mysql數據庫。如何選擇月份爲當月的所有字段?選擇當前月份記錄時間戳列的mysql

在此先感謝!

+0

重複https://stackoverflow.com/questions/4654961/mysql-only-within-the-current-month/ – 2017-06-06 01:30:46

回答

14

UPDATE

一個更好的指標友好的方式來查詢數據的日期範圍

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
    FROM table1 
WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH) 
    AND timestampfield < UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY); 

**注:**你不適用任何功能,您列數據,而是在條件的右側進行所有必要的計算(這是常數,並且僅在詩人執行時被評估)。通過這種方式,您可以讓MySQL受益於timestampfield列中的索引。

原來的答覆:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
    FROM table1 
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE()) 
    AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE()) 

注:雖然這個查詢產生它有效無效,你可能對timestampfield列的索引(ES)的正確用法正確的結果(這意味着MySQL的將被迫進行全掃描)

這裏是SQLFiddle演示

+0

如何,對今年 – Drew 2013-05-11 18:48:55

+0

有一個[YEAR函數(HTTPS://dev.mysql。 com/doc/refman/5.5/en/date-and-time-functions.html#function_year),皮爾斯先生。 – hd1 2013-05-11 18:50:33

+0

我知道:>不願意接受2011年5月和2012年將是你 – Drew 2013-05-11 18:51:11

2

如果你想使用索引,沒有任何功能,適用於柱:

SELECT * 
FROM tableX 
WHERE `date` >= UNIX_TIMESTAMP((LAST_DAY(NOW())+INTERVAL 1 DAY)-INTERVAL 1 MONTH) 
    AND `date` < UNIX_TIMESTAMP(LAST_DAY(NOW())+INTERVAL 1 DAY) ; 

使用可以在MySQL文檔中發現的功能:Date and Time functions

2

試試這個

SELECT * FROM table WHERE month(data) = EXTRACT(month FROM (NOW())) 
+1

以上查詢將比較只有一個月,所以你可能會得到前一年的月份記錄..我認爲正確的查詢是「==== SELECT * FROM表WHERE月(數據)= EXTRACT(月FROM(NOW()))和年數據)= EXTRACT(年FROM(NOW()))=====「 – 2015-01-05 06:23:27

6

使用本問題查看可否幫助您,

Query = "SELECT * FROM <table_name> WHERE MONTH(date_entered) = MONTH(CURDATE())"; 
-2

我認爲在MySQL這裏是最簡單的方法,我已經嘗試過,並且運行良好,你想選擇timestampfield在本月的行。

SELECT * FROM your_table 
WHERE MONTH(timestampfield)=MONTH(CURRENT_DATE()) AND 
YEAR(timestampfield)=YEAR(CURRENT_DATE()); 

以上將返回所有記錄的timestampfield是這個月在MySQL

+0

這將返回一個月而不是選擇當前月份。 所以你會得到前一個月的一半。 – John 2017-10-20 01:07:15

+0

@約翰我糾正了查詢,檢查出來... – indago 2018-03-08 12:05:47

1
SELECT 'data of your choice ' 
FROM 'your table' 
WHERE 
MONTH'datecolumn'=MONTH(CURRENT_DATE) 

從數據庫替換'用適當的文字

1
SELECT [columns] 
FROM [the_table] 
WHERE MONTH([date_column]) = MONTH(CURDATE()) 

更換之間的文本[ ](包括[])與你的數據。

0

在我看來,下面的比接受的答案更具可讀性...

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
FROM table1 
WHERE timestampfield >= DATE_FORMAT(NOW(), '%Y-%m-01') 

注意:這將從下個月選擇任何記錄,以及。這通常沒有關係,因爲沒有創建。