比较Oracle与PHP在查询中的日期

nukf8bse  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(101)

我想在php中比较从oracle数据库检索的日期。但是我不知道如何将月份名称转换为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

查询:

$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
suzh9iv8

suzh9iv81#

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

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

将返回一个date类型的值。
现在,在查询中,您必须确保“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文档。http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm

ttygqcqt

ttygqcqt2#

所以你有一个这样的日期字符串:'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时间戳),然后再把它转换回字符串。你必须按照你的方法,如果你想操纵你的日期添加或删除一些时间或类似的东西。
如果查询仍然有错误,并且您确信数据库中的日期是以该模式存储的,那么问题就出在查询语法上

t9aqgxwy

t9aqgxwy3#

您可以在Oracle查询中进行比较计算,而无需格式化任何PHP或Oracle日期。例如,如果我想将存储的日期与sysdate进行比较,我会这样做:

select date1, date2 - sysdate as date2 from table1;

它将返回一个表示时间日期的真实的数字。那么要比较的PHP就像这样:

If ($date1 < $date 2 ) {
   Do stuff;
}

相关问题