Php MySQL-月与月之间(而不是时间戳)

Php MySQL-月与月之间(而不是时间戳),php,mysql,date,Php,Mysql,Date,我如何生成一个MySQL查询来获取特定月份之间的行 例如,抓取月份介于01/01(1月1日)和01/06(6月1日)之间的行。您可以使用月()、年()和日()函数。所以您的查询看起来像 SELECT * FROM table WHERE month(date_field) >= 1 AND month(date_field) <= 6 AND year(date_field) = 2011 从表中选择*,其中月(日期字段)>=1和月(日期字段)您可以使用月(),年()和日()函数。

我如何生成一个MySQL查询来获取特定月份之间的行
例如,抓取月份介于01/01(1月1日)和01/06(6月1日)之间的行。

您可以使用
月()
年()
日()
函数。所以您的查询看起来像

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

从表中选择*,其中月(日期字段)>=1和月(日期字段)您可以使用
月()
年()
日()
函数。所以您的查询看起来像

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

从表中选择*,其中月(日期字段)>=1和月(日期字段)假设mysql中的列是正确的格式(日期/日期时间),您可以简单地比较(>,='2012-01-01'和datecolumn<'2012-06-01'

希望有帮助!

假设mysql中的列是正确的格式(日期/日期时间),您可以简单地比较(>,='2012-01-01'和datecolumn<'2012-06-01'

希望有帮助!

我不确定,如果要获取1月到6月的所有行,则仅获取6月1日之前的行或1月到5月的所有行。您可以使用例如:

[…]其中“日期”列介于“2012-01-01”和“2012-06-01”之间
这将为您提供包括6月1日在内的所有行

使用此选项可以获取1月到6月整个月份的所有行:

[…]其中年(`date\u column`)等于2012年,月(`date\u column`)介于1和6之间

(对于1月到5月,更改为1到5之间的

我不确定,如果要获取1月到6月的所有行,则仅获取6月1日之前的行或1月到5月之间的所有行。您可以使用例如:

[…]其中“日期”列介于“2012-01-01”和“2012-06-01”之间
这将为您提供包括6月1日在内的所有行

使用此选项可以获取1月到6月整个月份的所有行:

[…]其中年(`date\u column`)等于2012年,月(`date\u column`)介于1和6之间

(在1月到5月之间更改为1到5之间的

如果您用PHP生成SQL查询,您可以使用

(我减去一天以排除下个月第一天的数据)

或者你可以使用


如果用PHP生成SQL查询,可以使用

(我减去一天以排除下个月第一天的数据)

或者你可以使用


哇-真棒的响应伙计们!看起来你所有的方法都应该这样做!再次感谢哇-真棒的响应伙计们!看起来你所有的方法都应该这样做!再次感谢你的第一个想法并不那么热门,因为如果你从一月份开始休息一个月,你会在不存在的第0个月结束。相反,在PHP中使用make time命令将是非常有用的是不是更好?@Paul,让我不同意:加/减间隔可以正确处理此类情况。在示例中,您建议它将返回上一年的12月。您的第一个想法并不那么热门,因为如果您从1月开始休息1个月,您将在不存在的0月结束。相反,在PHP中使用make time命令会更好“不是吗?@Paul,让我不同意:添加/减去间隔可以正确处理此类情况。在本例中,您建议它将返回上一年的12月。警告:如果
date\u列
是带有时间成分的类型,那么
date\u列在'2012-01-01'和'2012-06-01'之间
将不会返回,例如,
date的行_column
的值是
2012年6月1日凌晨12:34am
。它将在2012-06-01 00:00时关闭。这对初学者来说似乎有点违反直觉,所以我想我应该特别提到它。@MattGibson的观点很好。替代方法:使用
日期(DATE\u column)
而不是
date\u列
。如果使用带有时间组件的
date\u列
,则可以使用
MONTH(强制转换(日期时间为日期))解析值
警告:如果
date\u列
是带有时间成分的类型,那么在'2012-01-01'和'2012-06-01'之间的
date\u列
将不会返回,例如,
date\u列
的值为
2012年6月1日12:34am
。它将在2012-06-01 00:00被切断。这对初学者来说似乎有点违反直觉,所以我想我应该特别提一下。@MattGibson的观点很好。替代方法:使用
DATE(DATE\u column)
而不是
DATE\u column
。如果使用带有时间组件的
DATE\u column
,则可以使用
MONTH(CAST(DATE\u time AS DATE))

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