如何生成MySQL查询以获取特定月份之间的行 例如,在01月1日(1月1日)和1月6日(6月1日)之间抓住一行
答案 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';