我在mysql数据库中将日期存储为varchar,格式类似2017年7月17日

我在mysql数据库中将日期存储为varchar,格式类似2017年7月17日,mysql,Mysql,我将datetime存储为varchar不幸的是,我收到了很多数据,现在我想获得两个日期之间的记录,下面是我的查询,但它没有返回正确的结果集 $start_date=$_POST['start_date']; $to_date =$_POST['end_date']; $wbs =$_POST['wbs']; if(!empty($_POST['wbs'])) { $query="SELECT * FROM plan_voucher WHERE

我将datetime存储为varchar不幸的是,我收到了很多数据,现在我想获得两个日期之间的记录,下面是我的查询,但它没有返回正确的结果集

$start_date=$_POST['start_date']; 
    $to_date   =$_POST['end_date'];
     $wbs =$_POST['wbs'];
     if(!empty($_POST['wbs'])) 
     {
   $query="SELECT * FROM plan_voucher WHERE location=".$_SESSION['role']." and created_at between '".$start_date."' and '".$to_date."'"; 

使用已经在他的评论中提到@Tim的日期转换,并按如下方式尝试您的查询

SELECT * FROM plan_voucher WHERE location=".$_SESSION['role']."
and STR_TO_DATE(created_at,'%m/%d/%Y') between '".$start_date."' 
and '".$to_date."'";

这可能更适合心灵论坛-但如果使用varchar日期,那么最好不要麻烦使用STR_to_DATE将不正确存储的文本日期转换为rdbms可能的副本,类似于:STR_to_DATEdate col,'%m/%d/%Y'。不要将日期存储为文本!我回显查询,它返回SELECT*FROM plan_凭证,其中location=1,STR_TO_DATECUREATED_在'07/13/2017'和'08/09/2018'之间的'%m/%d/%Y'在您的dbms上运行它