MySQL - 几个月之间(而不是时间戳)

时间:2012-01-19 10:02:51

标签: php mysql date

如何生成MySQL查询以获取特定月份之间的行 例如,在01月1日(1月1日)和1月6日(6月1日)之间抓住一行

5 个答案:

答案 0 :(得分:7)

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

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

为您提供包括6月1日在内的所有行。

使用它来获取1月到6月的整个月的所有行:

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

(1月到5月更改为BETWEEN 1 AND 5

答案 1 :(得分: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";

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

或者您可以使用EXTRACT

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

答案 2 :(得分:2)

假设mysql中的列格式正确(日期/日期时间),您只需比较(>,<):

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

希望它有所帮助!

答案 3 :(得分: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))

答案 4 :(得分:0)

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