查询日期中的月,日和年

时间:2013-07-17 05:35:34

标签: php mysql date

在我的情况下,我在mySQL中有一个日期字段,我曾经通过下面的代码获取变量的值。当我查询完整的日期,例如“08-28-1989”时,这是正确的。

MySQL的:

SELECT COUNT(*)
FROM content 
where dateReceived='{$approved_date}' 
and description='{$description}'

PHP:

   $approved_year   = $_POST["approved_year"];
   $approved_month  = $_POST["approved_month"];
   $approved_day    = $_POST["approved_day"];
   $approved_dt = strtotime($approved_year."-".$approved_month."-".$approved_day);
                    $approved_date  = date("Y-m-d",$approved_dt);


如果我说用户只输入“08”(仅限月份),那么我怎样才能使它更具动态性,然后它显示该月份的所有记录,无论日期和年份如何。或者用户只需输入月份和年份,只需将其查询到我的数据库。

这是我的HTML:

<p>
            Date Approved
            <select name="approved_month">
            <?php
                $month = array(" ","January","February","March","April",
                               "May","June","July","August",
                                "Septembe","October","November","December");
                for($x=0;$x<12;$x++){
                    echo "<option value=\"".$x."\">".$month[$x]."</option>";
                }
            ?>
            </select>
            <input type="text" name="approved_day" value="" size="2" />
            <input type="text" name="approved_year" value="" size="10" />
</p>

2 个答案:

答案 0 :(得分:1)

在mysql端执行此操作的一种方法是使用MONTH()YEAR()函数。

SELECT * 
  FROM Table1
 WHERE MONTH(date) = 5;

SELECT * 
  FROM Table1
 WHERE MONTH(date) = 5
   AND YEAR(date) = 2013;

注意:此类方法的缺点(使用date列上的函数)是date列上不会使用任何索引。

可以使用BETWEEN

重写第二个查询
SELECT * 
  FROM Table1
 WHERE date BETWEEN '2013-05-01' AND '2013-05-31';

可以使用relative date formats

在php中轻松构建此类查询的月份的第一个日期和最后日期

这是 SQLFiddle 演示

答案 1 :(得分:1)

您可以将日期分解为数据库中的单独字段。日,月和年。 用爆炸分解日期:

$date = date("Y-m-d");
$explodedDate = explode("-", $date);
$year = $explodedDate[0];
$month = $explodedDate[1];
$day = $explodedDate[2];

然后,您可以将单独的日期属性插入数据库,然后使用mysqli查询根据用户输入显示所需的结果。即:

query = "SELECT * FROM table WHERE month = $userEnteredMonth";