我的数据库中的日期字段有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');
通过使用上述查询,它只是比较日期而不是月份和年份。因此它将返回那些日期大于今天日期的记录。
但是正确的结果还没有到来......
答案 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)
在您的代码中,您使用两个函数来重构日期格式。
date_format
STR_TO_DATE
使用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