如何在MySQL中搜索任何格式的日期


how to search date in any format in mysql

我有一个带有下拉选项的搜索表单,使用户能够按特定列进行搜索。这是我的代码:

<form action="<?php echo site_url('admin/home/search');?>" method="post" accept-charset="utf-8"> 
    <div class="pull-left" style="margin-left:150px" >  
        <select class="form-control pull-left" name="searchby" id="searchby" >
            <option class="label">- Search by -</option>
            <option value="name">Name</option>
            <option value="address">Address</option>
            <option value="date">Date</option>
        </select> 
    </div>    
    <div class="pull-right" style="margin-left:10px">
        <div class="input-group col-sm-12">
            <input type="text" class="form-control" placeholder="Search " name="key_key" id="key_key" required /> 
            <div class="input-group-btn">
                <button class="btn btn-md" type="submit"><span class="fa fa-search"></span></button>
            </div>
        </div>
    </div> 
</form>

如果我按日期搜索并输入三月,它不会给出任何结果。这是我的MySQL语句:

$sql = "SELECT *,date_format(schedule,'%M %e, %Y') as datesched,date_format(schedule,'%h:%i:%s %p') as timesched FROM `event` WHERE schedule LIKE '%".$search_term."%'";
    $query = $this->db->query($sql);
    if($query->num_rows() > 0){
        foreach($query->result() as $row){
            $data[] = $row;
        }
        return $data;
    }else{
        return 0;
    }

schedule列的数据类型为 timestamp

您不能只使用字符串来搜索datetime字段。
为此,您必须知道搜索字符串的框架格式。

如果搜索字符串采用YYYY-MM-DD格式,则它与数据库日期格式匹配。然后,您可以直接使用like运算符,如下所示:

WHERE date_format(schedule, '%Y-%m-%d') LIKE '%".$search_term."%'"

您必须修复搜索字符串的日期输入格式。

如果您使用的JS和CSS框架支持CSS类来申请文本字段,请使用它。您最好为选择选项选择一个onChange事件,并更改搜索字符串输入元素的日期时间类型 CSS 类。这将解决您的问题。

参考

  • MySQL:日期和时间函数
  • jQueryUI: Datepicker

在这种情况下使用 LIKE 是错误的,因为您可以使用范围,例如 BETWEEN .

你必须首先产生你正在寻找的愤怒,比如说2014年3月,然后有:

$from = '2014-03-01 00:00:00';
$to   = '2014-03-31 23:59:59';

并在查询中使用它们:

$query = "SELECT 
    *,date_format(schedule,'%M %e, %Y') as datesched,
    date_format(schedule,'%h:%i:%s %p') as timesched 
FROM `event` 
WHERE schedule BETWEEN '".$from."' AND '".$to."'";

您可以通过多种方式从字符串开始生成日期,请查看 http://php.net/manual/en/function.date-parse.php

我个人使用 http://php.net/manual/en/datetime.createfromformat.php

  1. String使用str_to_date() Date格式
  2. SELECT STR_TO_DATE('12/15/2008', '%m/%d/%Y');
  3. 与这些更改的查询相同