2016-08-01 64 views
2

我有一個表,並在該表中有一列名爲date_created,這是一個時間戳標記格式2016-07-20 11:30:15,雖然我正在提取記錄,但我只能通過在我的前端字段like(month_no/year)1/2016,2/20163/2016 .....所以我必須取得基於一個月的所有記錄。那麼我怎麼能實現這個查詢。到目前爲止,我嘗試這樣。MySQL獲取所有記錄基於一年的一個月

SELECT t.* 
FROM stock t 
WHERE MONTH(str_to_date(t.date_created,'%Y/%M')) = 7 

回答

2

既然你有一個timestamp列,你不必太擔心。您需要將月份編號和年份編號放入相應的位置。

SELECT t.* 
FROM stock t 
WHERE MONTH(t.date_created) = ? 
AND YEAR(t.date_created) = ?; 

如果一個月= 7年= 2016然後將查詢:

SELECT t.* 
FROM stock t 
WHERE MONTH(t.date_created) = 7 
AND YEAR(t.date_created) = 2016; 
0

如果您對列上創建索引,那麼我建議您不要使用WHERE子句中的任何功能,這使得查詢緩慢和非優化搜索。請使用下面的鏈接爲什麼我說這句話的

What makes a SQL statement sargable?

我會建議你使用下面的查詢。

SELECT t.* 
FROM stock t 
WHERE t.date_created between '2016-07-01 00:00:00.000' AND '2016-07-31 00:00:00.000' 
+0

我必須通過只有月份和年份,但你傳遞完整的格式。 – Ranjan

+0

如果你的桌子上有索引,那麼我建議你不要使用月份和年份功能。使用可以輕鬆使用變量來轉換傳遞的月份和年份,並以完整的日期時間格式轉換它們。請讓我知道你是否索引。 –

相關問題