【问题标题】:query with date range condition returns empty result具有日期范围条件的查询返回空结果
【发布时间】:2013-04-07 03:40:13
【问题描述】:

我有一个查询,它从特定日期范围内的表中读取一些记录。我在codeigniter框架下使用PHP,查询很简单。

$this->db->select('aa.code,aa.employee_code ,aa.assign_date,aa.asset_serial_no');
$this->db->from('asset_assigns as aa');
$this->db->where("aa.assign_date >= $date1"); 

以上工作正常!

$this->db->select('aa.code,aa.employee_code ,aa.assign_date,aa.asset_serial_no');
$this->db->from('asset_assigns as aa');
$this->db->where("aa.assign_date <= $date2");

上面还读取了正确数量的查询!

$this->db->select('aa.code,aa.employee_code ,aa.assign_date,aa.asset_serial_no');
$this->db->from('asset_assigns as aa');
$this->db->where("aa.assign_date <= $date2");
$this->db->where("aa.assign_date >= $date1");

但是这个有两个'where'的返回空!!!

【问题讨论】:

    标签: mysql codeigniter


    【解决方案1】:

    对于日期比较,请使用 mysql datedifftimediff 函数。

    $this->db->where("datediff(aa.assign_date,$date2) <= 0 and datediff(aa.assign_date,$date1) >= 0");
    

    如果您不明确,则将日期作为字符串进行比较。考虑两个查询:

    select date('2010/10/01') > date('2010/2/15');
    

    通过日期比较,您会得到正确的输出“1”,第一个日期大于第二个日期,而:

    select '2010/10/01' > '2010/2/15';
    

    通过字符串比较,您会得到“0”,这是日期的错误输出(但字符串的正确输出)。

    【讨论】:

    【解决方案2】:
    $this->db->where("aa.assign_date <= $date2 AND aa.assign_date >= $date1");
    

    【讨论】:

    • 你在哪里设置了 $date1 和 $date2 ?
    • 我已经在查询之前回显了日期,它们显示了我想要的日期,并且我确信该范围内有很多记录:function sbrns($date1, $date2){echo $date1 ." - ".$date2;...
    • select 声明之前尝试echo $date1 和 $date2 以了解它们是否正确
    【解决方案3】:

    我不确定这些 db 方法是如何在 codeignitor 中实现的 但也许你可以替换;

    $this->db->where("aa.assign_date <= $date2");
    $this->db->where("aa.assign_date >= $date1");
    

    $this->db->where("aa.assign_date <= $date2 AND aa.assign_date >= $date1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-26
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2015-02-26
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多