类型为VARCHAR时的SQL查询日期

时间:2014-01-22 22:38:41

标签: php mysql sql codeigniter

我正在尝试查询两个日期之间的数据库...问题是我查询的列包含当前格式为“01/01/2014”的日期(dd / mm / yyyy)列类型为VARCHAR。

目前,我无法将列转换为日期类型。

基本上当我查询表因为它没有设置为日期类型时,查询之间没有返回正确的行......

有没有其他人遇到过这个问题,我可以在查询中更改某些内容吗?

$this->db->where('IssueDate >=', '02/12/2013');
$this->db->where('IssueDate <=', '22/01/2014');
$query = $this->db->get('MYTABLE');

谢谢你们。

3 个答案:

答案 0 :(得分:6)

解决方案是使用str_to_date()

$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=", "'2013-12-92'");
$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') <=", "'2014-01-22'");
$

您可能无法控制数据库。但是你可以控制自己的常量。你应该习惯ISO标准YYYY-MM-DD这些常数 - 大多数数据库都是明确无误的。

答案 1 :(得分:0)

我可能会建议在数据库中的表上创建一个视图,该视图将您拥有的字符串日期列转换为以下格式... YYYYMMDD

该格式是可排序的,可以轻松地与其他类似的格式化日期进行比较 - 您甚至可以使用它进行日期算术。

请记住,视图不会复制表或添加任何性能开销。通过视图访问任何表通常是一个好主意,即使最初您不需要对基础表执行任何操作 - 如果您以后发现需要执行它们将会有所帮助。

答案 2 :(得分:0)

BETWEEN 子句与 STR_TO_DATE()一起使用。检查以下代码: -

$wh = STR_TO_DATE(`IssueDate`,'%d/%m/%Y')." between '02/12/2013' and '22/01/2014'";
$this->db->where($wh);

期待它能给你完美的结果。