从日期(d-M-Y)格式的两个日期范围中获取结果集

时间:2014-05-07 13:21:55

标签: php mysql date

在我的数据库中,日期保存的格式如下-------

Col_date

05-May-2014

07-APR-2014

在我的仪表板中,我必须显示表格中的结果,其中col_date介于当前日期和当前日期7天之前的日期之间。

我得到当前日期------

$curdate = date('d-M-Y', time());

我得到了7天的回复日期-------

$backdate = date('d-M-Y', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);
$prevdate = date('d-M-Y', $date);

我运行查询----------

select * from `requisition` WHERE col_date >= '$prevdate' AND col_date <= '$curdate'  order by `rq_no` DESC

但我的问题是它在搜索并显示结果时无法比较月份。假设$ curdate是&#39; 05-May-2014&#39; $ prevdate是&#39; 2014年5月 - 2014年&#39;然后它显示了这些日期之间的结果,它还显示了这个日期范围在&#39; April&#39;,&#39; 1月&#39;,&#39; 2月&#39;,&#之间的结果39;三月&#39;

请告诉我并告诉我如何克服并解决这个问题

2 个答案:

答案 0 :(得分:0)

试一试:

$backdate = date('d-M-Y', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);


select * from `requisition` WHERE UNIX_TIMESTAMP(col_date) >= '$date' AND UNIX_TIMESTAMP(col_date) <= '$date1'  order by `rq_no` DESC

答案 1 :(得分:0)

将日期存储为varcharTEXT会使比较变得困难。最好存储为datedatetime

在您的情况下,解决方法是

$backdate = date('Y-m-d', time());
$date1 = strtotime($backdate);
$date = strtotime("-7 day", $date1);
$prevdate = date('Y-m-d', $date);


select * from 
`requisition` 
WHERE 
date_format(str_to_date(col_date,'%m-%b-%Y'),'%Y-%m-%d') >= '$prevdate' 
AND date_format(str_to_date(col_date,'%m-%b-%Y'),'%Y-%m-%d') <= '$curdate'
order by `rq_no` DESC

所以我以Y-m-d格式输入日期。 然后在where子句中使用了mysql函数date_formatstr_to_date。 str_to_date会将varchar日期转换为实际日期,然后是格式,并在比较中使用它们。