2012-01-19 41 views

回答

7

我不确定,如果你想抓取从1月到6月的所有行,只有直到6月1日的行或从1月到5月的所有行。你可以使用例如:

[...] WHERE `date_column` BETWEEN '2012-01-01' AND '2012-06-01' 

它给你所有行,包括6月1日。

使用这个来从月的整月的所有行至六月:

[...] WHERE YEAR(`date_column`)=2012 AND MONTH(`date_column`) BETWEEN 1 AND 6 

(改变BETWEEN 1 AND 5为一月至五月)

+1

警告词:如果'date_column'是一个带时间分量的类型,那么'date_column BETWEEN'2012-01-01'AND'2012-06-01''不会返回,例如, date_column的值是“2012年6月1日上午12:34”。它将在2012-06-01 00:00截止。这对初学者来说似乎有点不直观,所以我想我会特别提到它。 –

+0

@MattGibson好点。替代方法:使用'DATE(date_column)'而不是'date_column'。 – DerVO

+0

如果您使用的是带有时间分量的'date_column',而不是您可以使用'MONTH(CAST(date_time AS DATE))解析该值' – CodeWhisperer

1

您可以使用month(),year()day()函数。因此,您的查询看起来像类似

SELECT * FROM table WHERE month(date_field) >= 1 AND month(date_field) <= 6 AND year(date_field) = 2011 

DATE_FIELD应该是一个日期或日期时间字段,如果它是一个时间戳,您需要使用FROM_UNIXTIMESTAMP功能,所以它看起来像month(FROM_UNIXTIMESTAMP(timestamp_field))

2

假设列在MySQL中是正确的格式(日期/日期),你可以简单地比较(>,<):

SELECT somecolumn 
FROM sometable 
WHERE datecolumn >= '2012-01-01' AND datecolumn < '2012-06-01' 

希望它能帮助!

+0

哇 - 真棒响应家伙!看起来像你所有的方法应该做的伎俩!再次感谢 – Zabs

0
SELECT 
    * 
FROM 
    yourtable 
WHERE 
    date BETWEEN '2012-01-01' AND '2012-06-01'; 
4

如果您生成在PHP中的SQL查询,你可以使用BETWEEN

$date = date("Y") . '-' . date("m") . '-01'; 
$sql = "SELECT * 
FROM `table` 
WHERE `date_column` BETWEEN '$date' AND '$date' + INTERVAL 1 MONTH - INTERVAL 1 DAY"; 

(我减去一天排除t他下个月第一天)

或者你可以使用EXTRACT

$month = 5; 
$sql = 'SELECT * 
FROM `table` 
WHERE EXTRACT(MONTH FROM `date_column`) = ' . $month; 
+0

您的第一个想法并不是那么热门,因为如果您从1月份开始1个月最终在0月份不存在..相反,在PHP中使用make time命令会更好吗? – Paul

+1

@Paul,让我不同意:正确地添加/减去间隔处理这种情况。在这个例子中,你建议它将在去年的12月份返回。 – Minras

+0

值得指出 – Paul

相关问题