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

时间:2015-09-03 09:47:13

标签: php oracle date datetime

我想在php中比较从oracle数据库中检索到的日期。但我不知道如何将月份名称如Sep转换为SEP。我不知道如何用大写字母转换月份。我想将2015-09-01格式转换为03-SEP-15。

      //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

QUERY:

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

ERROR:

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

2 个答案:

答案 0 :(得分:1)

在Oracle中,您可以使用to_date()函数将字符串转换为日期。和使用to_char()函数的字符串的日期

实施例

to_date('01-JAN-2015','DD-MON-YYYY')

将返回date类型的值。

现在,在您的查询中,您必须确保"之间的值为"声明是日期值。确保这一点的唯一方法是使$ sDate成为atring值并使用to_date函数。 假设您的日期字符串格式为01-JAN-2015 ...

$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文档。 http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm

答案 1 :(得分:0)

所以你有一个这样的日期字符串:'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时间戳)并将其转换回字符串。如果你想操纵你的日期添加或删除一些时间或类似的东西,你必须遵循你的方法。

如果查询仍然出错,并且您确定数据库中的日期与该模式一起存储的日期与查询语法中的问题相同