2011-06-15 108 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())