STR_TO_DATE无法在我的查询

时间:2015-11-28 06:41:38

标签: php mysql codeigniter

我的数据库中的日期字段有varchar数据类型。现在我必须将日期与当前日期进行比较,但由于数据类型(varchar)结果不正确。

我不想更改数据库中的数据类型,所以如何在codeigniter中查询?

在我的数据库日期采用格式30/11/2015

我当前的查询:

    //here vd is table field(one column).

    $cd = date('d/m/Y');//current date

    $this->db->where("date_format(STR_TO_DATE(vd, '%d/%m/%Y'),'%d/%m/%Y') >",$cd); //comparing date with current date
    $query =$this->db->get('warranty');
  

通过使用上述查询,它只是比较日期而不是月份和年份。因此它将返回那些日期大于今天日期的记录。

但是正确的结果还没有到来......

7 个答案:

答案 0 :(得分:6)

尝试这可能会对你有所帮助:

$cd = date('Y-m-d');

$this->db->where("date_format(STR_TO_DATE(vd, '%d/%m/%Y'),'%Y-%m-%d') >",$cd);
$query =$this->db->get('warranty');

如果在查询中使用date_format,您需要更改日期格式,而您更改的格式相同,可能就是它无法正常工作的原因。尝试以Y-m-d格式进行更改和比较。

答案 1 :(得分:1)

**Hope this may help you...**

$cd = date('d/m/Y');

$data['project'] = $this->common_model->selectRecord("SELECT * from project where project_date = '.$cd.'");

 in my project this is working ..

答案 2 :(得分:1)

试试这个:

$cd = date('d.m.Y');//current date

$this->db->where("STR_TO_DATE(vd, '%d.%m.%Y') >",$cd);
$query =$this->db->get('warranty');

为了确保它以您想要的格式出现,请使用DATE_FORMAT:

$cd = date('d.m.Y');//current date

$this->db->where("DATE_FORMAT(STR_TO_DATE(vd, '%d.%m.%Y'),'%d.%m.%Y') >",$cd);
$query =$this->db->get('warranty');

答案 3 :(得分:1)

您可以手动检查此查询吗?然后尝试在CodeIgniter

中添加它
$cd = date('d/m/Y');//current date

select * FROM warranty WHERE DATE_FORMAT(STR_TO_DATE(vd, '%d/%m/%Y'), '%Y-%m-%d') > DATE_FORMAT(STR_TO_DATE($cd, '%d/%m/%Y'), '%Y-%m-%d')

答案 4 :(得分:1)

你试过CAST吗?

SELECT * FROM warranty WHERE CAST(vd AS DATE) ....;

你试过DATE吗?

SELECT * FROM warranty WHERE DATE(vd) ....;

答案 5 :(得分:1)

更改此

$this->db->where("date_format(STR_TO_DATE(vd, '%d/%m/%Y'),'%d/%m/%Y') >",$cd);

$this->db->where("STR_TO_DATE(vd, '%d/%m/%Y') > NOW()");

答案 6 :(得分:1)

在您的代码中,您使用两个函数来重构日期格式。

  1. date_format
  2. STR_TO_DATE
  3. 使用STR_TO_DATE

    $now = date('d/m/Y'); //current date
    $userdate = '2009-05-18 22:23:00'; //which get from user inputs
    
    $dateModified = STR_TO_DATE($userdate,'%d/%m/%Y'); //output is 2009-05-18
    

    所以在功能

    $this->db->where('order_date >=', $dateModified);
    $this->db->where('order_date <=', $now);
    $query =$this->db->get('warranty');
    

    $this->db->where('order_date BETWEEN '.$dateModified.' and '.$now);
    
      

    此功能将为您提供userSearch输入和日期的结果。此函数的作用类似于MySQL中的between

    enter image description here