2011-06-15 188 views
2

我有一個表varchar字段名爲slldate。此字段包含此格式的日期:
2010-08-30
(YYYY-MM-DD)從本月選擇記錄

現在我想選擇使用MySQL查詢包含當前月份的記錄。

有人嗎?

回答

3

嘗試這種情況:

SELECT * FROM TABLE_NAME WHERE MONTH(slldate)=日期( 'M')和年份(slldate)=日期( 'Y');

+0

不確定日期函數將工作在varchar字段 – Rufinus 2011-06-15 09:08:57

+0

Rufinus,如果我將varchar字段轉換爲日期字段這會工作嗎? – Dreni 2011-06-15 09:20:11

7

由於您使用的是字段而不是日期字段,因此必須先轉換該值並使用正常的日期函數。像

SELECT * FROM table WHERE MONTH(CAST(slidate as date)) = MONTH(NOW()) AND YEAR(CAST(slidate as date)) = YEAR(NOW()) 
+0

謝謝,我可以將char字段轉換爲日期字段而不丟失記錄嗎?以及如果我將字段轉換爲日期字段,select語句將如何顯示? – Dreni 2011-06-15 09:15:08

+1

這實際上也會選擇前幾年,不確定是否首選。 – 2011-06-15 09:17:56

+0

Wesley van Opdorp,是否有助於增加YEAR(NOW()) – Dreni 2011-06-15 09:22:17

1

我有叫slldate一個varchar字段的表。此字段包含日期

然後您應該將其更改爲日期字段。你(應該)知道這是正確的事情。

下面的方法將與你的varchar字符串一起工作 - 但是對於日期可以簡化一些。

注意,因爲你的日期字符串已經大端,你不需要投他們和鬆散指數optinmisation的好處:

SELECT * 
FROM yourtable 
WHERE slldate >= CONCAT(DATE_FORMAT('%Y-%m-', NOW()),'01') 
AND slldate < CONCAT(DATE_FORMAT('%Y-%m-', NOW() + INTERVAL 1 MONTH), '01') 
1

SELECT * FROM table_name的WHERE YEAR(savedate)= YEAR (CURDATE())和MONTH(savedate)=月(CURDATE())