将日期存储为数据库中的文本但需要在两个日期之间查找记录?

时间:2013-02-26 07:06:05

标签: php codeigniter date

我将日期存储为mysql表中的VARCHAR。我实际上有一张发票表,用于存储发票详细信息及其日期。我在VARCHAR列中使用php的这个函数存储这些日期。

date("d/m/y")

现在我需要生成销售报告,例如从2012年4月5日到2013年4月5日。我很困惑如何找到日期范围。请指导。

我正在使用codeigniter。

4 个答案:

答案 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
?>