php ORA-01861: 文字与格式字符串不匹配

Posted

技术标签:

【中文标题】php ORA-01861: 文字与格式字符串不匹配【英文标题】:php ORA-01861: literal does not match format string 【发布时间】:2014-11-30 22:13:27 【问题描述】:

我正在编写一个 php 脚本来将数据插入 Oracle 数据库,当我尝试运行它时,我得到了 ORA-01861:literal does not match format string。它与日期有关,并且它们的计算方式,但我不确定如何/在哪里修复它。在表中,log_date 是日期类型。下面是我在建立数据库连接之后正在使用的代码部分。它需要进入我的 $query 定义吗?

$ticks = $mnemonic->timestamp . "\n";
$seconds = ($ticks - 621355968000000000) / 10000000;
$day = date("Y-m-d H:i:s", $seconds);

$query = "INSERT into TLM_Item(log_date) Values('$day')";

$updt = ociparse($conn, $query);
    if(!$updt)
    print "No query \n";
    exit;
    

    $r = ociexecute($updt , OCI_COMMIT_ON_SUCCESS);

【问题讨论】:

【参考方案1】:

Oracle 的默认日期格式不是 YYYY-MM-DD。不过幸运的是,Oracle 支持关键字DATE,因此支持日期。我没有在这种情况下使用它,但它应该可以工作:

$query = "INSERT into TLM_Item(log_date) Values (DATE '$day')";

或者,您可以使用内置函数to_date()

$query = "INSERT into TLM_Item(log_date) SELECT to_date('$day', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL";

【讨论】:

第一个选项不起作用,但第二个选项起作用。评论:1)错字:在第二个选项中,“HH:MI:DD”应该说“HH:MI:SS” 2)如果你像上面那样输入,你会得到一个错误“ORA-01849: hour must be between 1 和 12"。如果您改为输入“HH24:MI:SS”,它将起作用。 现在,只是一个后续问题:如果我想插入除日期之外的其他值,我是否只使用整个表达式 "SELECT to_date('$day', 'YYYY-MM- DD HH:MI:DD') FROM DUAL" 在 Values() 表达式中以及要插入的其他值? 另外,当我去数据库检查条目时,日期显示为:10-JAN-14,不包括时间。是什么导致它不出现? @fcr91 。 . .在 Oracle 中打印日期的默认格式是省略 hte 时间(如果需要更多详细信息,请使用 to_char())。如果要插入更多列,请使用insert . . . select。它可以完成 insert . . . values() 所做的一切,甚至更多。

以上是关于php ORA-01861: 文字与格式字符串不匹配的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01861: 文字与格式字符串不匹配: SQL

ORA-01861: 在 django 中执行获取模型对象时文字与格式字符串不匹配

Oracle ORA-01861: 文字与格式字符串不匹配

java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配

Mybatis 中报错:ORA-01861: 文字与格式字符串不匹配

查询 SQL语句的时候 出现oracle ora 01861 文字与字符串格式不匹配 百思不得其解!