只select月份和年份的MySQL

我有我的MySQL数据库中有一些行的列。 其中一行是DATE,如下所示: 2012-02-01

我想实现的只是在一年和一个月内使用PHP做一个SELECT。

SELECT的逻辑如下:

 $q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH""; 

具体的月份和年份将从$_POSTvariables传递,如$_POST['period']="2012-02";

我该怎么做?

 SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5 

如果你有

 $_POST['period'] = "2012-02"; 

首先,find月份的第一天:

 $first_day = $_POST['period'] . "-01" 

那么这个查询将使用Date如果你有一个索引:

 $q = " SELECT * FROM projects WHERE Date BETWEEN '$first_day' AND LAST_DAY( '$first_day' ) " ; 

也可以使用包含独占的时间间隔,这很好地工作(你不必担心如果列是DATEDATETIMETIMESTAMP ,也不必担心精度:

 $q = " SELECT * FROM projects WHERE Date >= '$first_day' AND Date < '$first_day' + INTERVAL 1 MONTH " ; 

干得好。 将计算留给PHP,并保存你的数据库的一些工作。 这样您可以有效地使用Date列上的索引。

 <?php $date = $_POST['period']; $start = strtotime($date); $end = strtotime($date . ' 1 month - 1 second'); $query = sprintf( 'SELECT * FROM projects WHERE Date BETWEEN FROM_UNIXTIME(%u) AND FROM_UNIXTIME(%u)', $start, $end ); 

编辑
忘了Unix时间戳转换。

在这里,查找MONTH和DATE在mySQL中的logging

这是您的POST值$_POST['period']="2012-02";

只是,爆炸值破折号$Period = explode('-',$_POST['period']);

从爆炸值获取数组:

Array ( [0] => 2012 [1] => 02 )

把值放在SQL查询中:

SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';

按月和年获得成果。

 $q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1; 

你可以这样做:

 $q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'"; 

逻辑将是:

 SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%'; 

LIKE操作符将select所有以$_POST['period']开头,随后是破折号和mont

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html – 一些额外的信息

从date栏获取月份和年份值

 select year(Date) as "year", month(Date) as "month" from Projects 

是的,这是工作,但它只返回一行,而有几行只能使用选定的列检索。 像SELECT标题一样,dateFROM mytable WHERE YEAR(Date)= 2017 AND MONTH(Date)= 09只返回一行。