如何在MySQL中按月获取记录?

时间:2015-05-26 07:57:28

标签: php mysql

我以dd-mm-yy格式将数据存储在数据库中,例如03-10-2013,

如何按月搜索记录?数字月份(01到12);

我目前正在使用

$query = "SELECT * FROM data  WHERE date LIKE %$month%";

但这不能正常工作。

4 个答案:

答案 0 :(得分:4)

我假设当你以一种格式说出存储在数据库中的日期时,它们不会使用" date"类型,而是使用varchar或char类型的列。

基于此,几乎没有办法做到这一点。

  1. 保持数据库不变,并即时转换值。
  2. SELECT * FROM data WHERE Month(STR_TO_DATE(datestrcolumn, '%d/%m/%Y')) = 5;

    1. 将列的类型更改为" date"类型列
    2. SELECT * FROM data WHERE Month(realdatecolumn) = 5;

      1. 将列的类型更改为" date"键入列,为月份存储单独的列。
      2. UPDATE data set monthcolumn = Month(realdatetimecolumn)

        然后

        SELECT * FROM data WHERE monthcolumn = 5;
        

        在monthcolumn上创建索引,如果有大量数据,此查询将比其他查询快得多

答案 1 :(得分:3)

首先在数据库结构中修复日期格式,将其更改为:yyyy-mm-dd

然后将查询语句更改为:

$query = "SELECT * FROM data WHERE MONTH(`date`) = '$month';

这将选择月份为' 5'或者' 11'或者' 12'这将给不同年份的重复。

如果您需要包含年份的月份(以避免重复年份):

$query = "SELECT * FROM data WHERE SUBSTR(DATE(`date`),1,7) = SUBSTR(DATE('$month'),1,7);

这将返回:' 2015-01'或者' 2014-12'

获取日期为' 01'或者' 04'或者' 12':

$query = "SELECT * FROM data WHERE SUBSTR(DATE(`date`),6,2) = SUBSTR(DATE('$month'),6,2);

答案 2 :(得分:0)

试试这个......

您可以使用MySQL MONTH()函数

MySQL MONTH()返回日期的MONTH,范围为1到12(1月到12月)。当日期的MONTH部分为0时,它返回0

4是4月

SELECT * FROM tbl WHERE MONTH( date ) ='4' 

答案 3 :(得分:0)

你可以这样做......因为它不是日期格式(YYYY-MM-DD)

$q="SELECT * FROM data  WHERE MONTH(DATE_FORMAT(STR_TO_DATE(date, '%d-%m-%Y'), '%Y-%m-%d') ) = '$YOUR_SEARCH_MONTH' ";