0

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

date("d/m/y")

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

我正在使用代码点火器。

4

4 回答 4

1

如果是日期,为什么不存储为日期?您现在可以添加另一列,然后使用脚本或程序用解析和重组的日期填充这个新列。因此,您未来的查询可以使用日期数据类型。

于 2013-02-26T07:09:33.123 回答
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
?>
于 2013-02-26T07:54:04.583 回答
0

我认为您可以将日期从 char 获取到 timestamp ,当然,您需要为您的日期做一些格式...

这是一些示例...

$senttime = strtotime($date . ' ' . $hour . ':' . $min . ':00');
$exdate   = strtotime($exdate . ' 00:00:00');
$now      = strtotime("now");

if ($now < $senttime && $senttime < $exdate) {...

比你能得到的范围...

于 2013-02-26T07:11:26.627 回答
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();
于 2013-02-26T07:16:59.820 回答