Php STR_TO_DATE在我的查询中不起作用
数据库中的日期字段具有varchar数据类型。现在我必须将日期与当前日期进行比较,但由于数据类型(varchar)的原因,结果并没有正确显示 我不想更改数据库中的数据类型,所以如何在codeigniter中查询 在我的数据库中日期为2015年11月30日的格式 我当前的查询:Php STR_TO_DATE在我的查询中不起作用,php,mysql,codeigniter,Php,Mysql,Codeigniter,数据库中的日期字段具有varchar数据类型。现在我必须将日期与当前日期进行比较,但由于数据类型(varchar)的原因,结果并没有正确显示 我不想更改数据库中的数据类型,所以如何在codeigniter中查询 在我的数据库中日期为2015年11月30日的格式 我当前的查询: //here vd is table field(one column). $cd = date('d/m/Y');//current date $this->db->where("
//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');
通过使用上述查询,它只是比较日期,而不是月份和年份。因此,它将返回那些日期大于今天日期的记录
但不会有合适的结果……试试这个:
**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 ..
$cd = date('d.m.Y');//current date
$this->db->where("STR_TO_DATE(vd, '%d.%m.%Y') >",$cd);
$query =$this->db->get('warranty');
为确保它以您想要的格式发布,请使用日期\格式:
$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');
你能手动检查这个查询吗。然后尝试将其添加到
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')
你试过石膏吗
SELECT * FROM warranty WHERE CAST(vd AS DATE) ....;
你试过约会吗
SELECT * FROM warranty WHERE DATE(vd) ....;
改变这个
$this->db->where("date_format(STR_TO_DATE(vd, '%d/%m/%Y'),'%d/%m/%Y') >",$cd);
到
在代码中,您使用两个函数来重新构造日期格式
date\u格式
STR\u TO\u DATE
使用
STR\u到日期
$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');
此函数将为您提供用户搜索输入的结果和截止日期。此函数的作用与MySQL中的类似
试试这可能会对您有所帮助:
$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_格式,则需要更改日期格式。您正在更改相同的格式,这可能是它无法工作的原因。尝试以Y-m-d格式进行更改和比较。不,这不是问题。我只在这里写了“日期”。但是字段类型是varchar而不是date,因此我无法比较date。不,它是'PD',这意味着过去的日期我可以在此查询中使用cast列吗?如果是,那么怎么做?无需使用
cast
而是使用'str\u to\u date(PD,“%d-%m-%Y”)>'
谢谢兄弟。。。这意味着我的条件应该是$this->db->where('str_to_date(PD,“%d-%m-%Y”)>,$cd)????但在数据库中,日期是用varchar数据类型$cd=date('d/m/Y')存储的$这->数据库->其中(vd>,“$cd”)$查询=$this->db->get('warranty');尝试此it工作选择*自保修
何处vd>2015年10月11日。在您的MySQLSELECT*中尝试此查询,从events
WHERE格式(开始,'DD/MM/YYYY')>“2015年11月25日”限制0,30我尝试了此操作,对meLet us运行良好。尝试使用strotime。我已修改了答案。错误号:1305函数tablename.strotime不存在抱歉,只需再次修改。请尝试使用FALSE作为第三个参数。我修改了答案。如果我使用,它将返回所有记录false@DeepParekh是否有任何记录可满足此类条件。也是手动执行的?是的,在数据库中有一条记录完成了所有的任务,我仔细检查了一下,你的问题真的很奇怪。。您能只导出保修表和两行或更多行吗?仅用于在我的本地实例上进行尝试。创建仅包含两个字段的表。vdate(varchar(25))和id(int(11))。插入两个三个记录。但是日期应该是d/m/Y(1/12/2015)格式。谢谢,但我的问题不同。我没有用户输入日期。我只需要核对一下当前日期。但在数据库中,日期是以varchar数据类型存储的,因此结果不能正确显示。因此,您的结果不会显示。将数据库字段更改为DATETIME
不,我不能。因为那个表格里有很多数据。因此,如果我更改数据类型,它会将数据(日期字段)更改为0000-00-00。如果您现在这样做,那么没有任何危害。但是当你主持和在线项目时,你必须三思而后行。一点也不好,把所有数据都放到CSV中,然后清除数据库。更改类型并导入它。游戏结束
$this->db->where('order_date BETWEEN '.$dateModified.' and '.$now);
$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');