首页 文章

查询日期中的月,日和年

提问于
浏览
0

在我的情况下,我在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 回答

  • 1

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

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

    Note: 这种方法的缺点(使用 date 列上的函数)是 date 列上不会使用任何索引 .

    可以使用BETWEEN重写第二个查询

    SELECT * 
      FROM Table1
     WHERE date BETWEEN '2013-05-01' AND '2013-05-31';
    

    可以使用relative date formats在php中轻松构建此类查询的月份的第一个日期和最后日期

    这是 SQLFiddle 演示

  • 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";
    

相关问题