我将日期存储为mysql表中的VARCHAR。我实际上有一张发票表,用于存储发票详细信息及其日期。我在VARCHAR列中使用php的这个函数存储这些日期。
date("d/m/y")
现在我需要生成销售报告,例如从2012年4月5日到2013年4月5日。我很困惑如何找到日期范围。请指导。
我正在使用codeigniter。
答案 0 :(得分:1)
如果是日期,为什么不存储日期?您现在可以添加另一列,然后使用脚本或程序使用已解析和重新组合的日期填充此新列。因此,您将来的查询可以使用日期数据类型。
答案 1 :(得分:0)
我想你可以从char到timestamp获取日期,当然,你需要为你的约会做一些格式......
这里有一些样本......
$senttime = strtotime($date . ' ' . $hour . ':' . $min . ':00');
$exdate = strtotime($exdate . ' 00:00:00');
$now = strtotime("now");
if ($now < $senttime && $senttime < $exdate) {...
比你能得到范围......
答案 2 :(得分:0)
使用MySQL的内置字符串进行日期解析
SELECT * FROM your_table WHERE STR_TO_DATE(`date_column`,'%d/%m/%Y') BETWEEN '2012-04-05' to '2013-04-05'
或CI ActiveRecord
$this->db->select('*')
$this->db->from('your_table');
$this->db->where('STR_TO_DATE(`date_column`,"%d/%m/%Y") >=', '2012-04-05');
$this->db->where('STR_TO_DATE(`date_column`,"%d/%m/%Y") <=', '2013-04-05');
$query = $this->db->get();
$results = $query->result();
答案 3 :(得分:0)
我在这里提出一个建议,而不是一个明确的答案。
您是否有任何特定原因将日期存储为varchar。存储为整数至少比varchar更有意义。你可以修改你的数据库吗?将日期存储为日期yyyy-mm-dd。或者在这个时候完全不可能?
如果你想将上述格式作为显示,你可以
<?php list($year, $month, $day) = explode("-", $date) ?>
并重新排序以显示为
<?php echo $day."/".$month."/".$year ?>
如果完全不可能重做db,那么使用MYSQL STR_TO_DATE
请查看此链接是否有帮助:http://www.w3resource.com/mysql/date-and-time-functions/mysql-str_to_date-function.php
[编辑]
<?php
$date_from = '26/02/13';
$date_to = '26/02/13';
//Because STR_TO_DATE would create a valid date from what you have in varchar.
list($day, $month, $year) = explode("/", $date_from);
$date_from = $year . "-" . $month . "-" . $day;
list($day, $month, $year) = explode("/", $date_to);
$date_to = $year . "-" . $month . "-" . $day;
$this->db->where('STR_TO_DATE(`date`,"%d/%m/%y") >=', $date_from);
$this->db->where('STR_TO_DATE(`date`,"%d/%m/%y") <=', $date_to);
$query = $this->db->get('TABLENAME');
//use your result here
?>