我想在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
3条答案
按热度按时间suzh9iv81#
在Oracle中,可以使用to_date()函数将字符串转换为日期。使用to_char()函数将日期转换为字符串
例如
将返回一个date类型的值。
现在,在查询中,您必须确保“between”语句中的值是日期值。确保这一点的唯一方法是使$sDate成为一个atring值并使用to_date函数。假设您的日期字符串的格式为2015年1月1日.
另请参阅有关日期格式的Oracle文档。http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm
ttygqcqt2#
所以你有一个这样的日期字符串:'2015-09-01',您希望将其转换为'01-09-2015'以在查询中使用。
如果你想调试,如果问题是在如何处理php中的日期转换,请尝试这样做:
然后尝试运行查询。如果你只需要改变日期中元素的顺序,你不需要把字符串转换成日期(unix时间戳),然后再把它转换回字符串。你必须按照你的方法,如果你想操纵你的日期添加或删除一些时间或类似的东西。
如果查询仍然有错误,并且您确信数据库中的日期是以该模式存储的,那么问题就出在查询语法上
t9aqgxwy3#
您可以在Oracle查询中进行比较计算,而无需格式化任何PHP或Oracle日期。例如,如果我想将存储的日期与sysdate进行比较,我会这样做:
它将返回一个表示时间日期的真实的数字。那么要比较的PHP就像这样: