【问题标题】:mysql active record query not workingmysql活动记录查询不起作用
【发布时间】:2013-02-26 10:11:03
【问题描述】:

我有一个varchar 列,它将日期存储为26/02/2013。我需要将其转换为日期格式以进行比较。作为测试查询,我在活动记录中使用下面的查询来获取日期为26/02/2013的所有记录

$this->db->select('*');
$this->db->from('salesinvoices');
$this->db->where('STR_TO_DATE(`date`,"%d/%m/%y")', 'CONVERT("26/02/13")');

这总是不返回任何结果。这里有什么问题。

【问题讨论】:

  • 冒着说明显而易见的风险,为什么不将日期存储为日期?
  • 嗯,这看起来很混乱。我如何存储它们?我如何找回它们?以及如何比较它们?
  • 您的查询无法进行,因为您没有正确使用CONVERT(),如in the manual所示。
  • 按照草莓的建议,将日期以 Y-m-d 格式保存在数据库中。关于mysql日期格式->link
  • 查看我的最新编辑。这应该工作。你不需要使用 convert() 函数,它与日期无关。

标签: php mysql codeigniter activerecord


【解决方案1】:

编辑

$this->db->where('DATE_FORMAT(NOW(), "%d/%m/%y")', '26/02/13',FALSE);

$this->db->where('STR_TO_DATE('.$date.',"%d/%m/%y")', '26/02/13',FALSE);

codeigniter 自动转义 where()。

使用这个:

$this->db->where('STR_TO_DATE(`date`,"%d/%m/%y")', 'CONVERT("26/02/13")',FALSE);

提示:当您的数据库查询遇到问题时,这非常有用

    echo "<PRE>";
    echo $this->db->last_query();
    echo "</PRE>";

【讨论】:

  • 这给了我:错误号:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 ')' 附近使用正确的语法 SELECT *FROM (salesinvoices)WHERE STR_TO_DATE(date,"%d/%m/%y") = CONVERT("26/02/13") 文件名:C:\wamp\www\backbone\system\database\DB_driver.php 行号:330
  • $this->db->where('STR_TO_DATE("invoiceDate","%d/%m/%y")', '26/02/13',FALSE);不工作
  • $this->db->last_query 返回的查询:SELECT *FROM (salesinvoices)WHERE STR_TO_DATE(invoiceDate,"%d/%m/%y") = '26/02/ 13'
  • 将反引号(`)添加到您的 invoiceDate 字段中,您应该一切顺利。
猜你喜欢
  • 2014-02-25
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多