将查询中的oracle日期与PHP进行比较

将查询中的oracle日期与PHP进行比较,php,oracle,date,datetime,Php,Oracle,Date,Datetime,我想比较php中从oracle数据库检索到的日期。但我不知道如何将月份名称(如Sep)转换为Sep。我不知道如何将月份转换为大写字母。我想将2015-09-01 formate转换为2015年9月3日 //sDate: 2015-09-01 eDate: 2015-09-03 $date1=date('d-M-Y', strtotime($sDate)); $date2=date('d-M-Y', strtotime($eDate)); // CREATEDATE: 03-SEP

我想比较php中从oracle数据库检索到的日期。但我不知道如何将月份名称(如Sep)转换为Sep。我不知道如何将月份转换为大写字母。我想将2015-09-01 formate转换为2015年9月3日

      //sDate: 2015-09-01 eDate: 2015-09-03

$date1=date('d-M-Y', strtotime($sDate));
$date2=date('d-M-Y', strtotime($eDate));

// CREATEDATE: 03-SEP-15 02.44.42.000000 PM
查询:

$stid = oci_parse($conn, "SELECT * FROM table1 WHERE CAST(CREATEDATE AS DATE)  between   '".$sDate."' AND  '".$eDate."'");
错误:

Warning: oci_execute(): ORA-01861: literal does not match format string

因此,您有一个日期字符串,如:“2015-09-01”,您希望将其转换为“01-09-2015”,以便在查询中使用

如果您想调试php中如何处理日期转换的问题,请尝试执行以下操作:

list($year,$month,$day)=explode('-',$date);
$months = ['','JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'];

$date = implode('-',$day,$months[$month],$year);
然后尝试运行查询。如果只需要更改日期中元素的顺序,则不需要获取字符串、将其转换为日期(unix时间戳)并将其转换回字符串。如果你想操纵你的日期,添加或删除一些时间或类似的东西,你必须遵循你的方法


如果查询仍有错误,并且您确信数据库中的日期是以该模式存储的,而不是Oracle中查询语法中的问题,则可以使用to_date()函数将字符串转换为日期。以及使用to_char()函数将日期转换为字符串

范例

to_date('01-JAN-2015','DD-MON-YYYY')
将返回日期类型的值

现在,在查询中,必须确保“between”语句中的值是日期值。确保这一点的唯一方法是将$sDate设为一个atring值,并使用to_date函数。 假设您的日期字符串格式为2015年1月1日

$stid = oci_parse($conn, 
  "SELECT * 
   FROM table1 
   WHERE CAST(CREATEDATE AS DATE)  
   between  to_date('".$sDate."','DD-MON-YYYY') 
   AND  to_date('".$eDate."','DD-MON-YYYY')");
另请参见有关日期格式的Oracle文档。

请你把你的问题说得更清楚一点好吗。请检查数组中的月份名称是否符合预期