Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php STR_TO_DATE在我的查询中不起作用_Php_Mysql_Codeigniter - Fatal编程技术网

Php STR_TO_DATE在我的查询中不起作用

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("

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

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

在我的数据库中日期为2015年11月30日的格式

我当前的查询:

    //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');