oracle 错误:ORA-01861:文字与格式字符串不匹配

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14136738/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 01:21:06  来源:igfitidea点击:

Error : ORA-01861: literal does not match format string

oracle

提问by hsuk

Can someone find the bug on the mentioned code please :

有人可以在提到的代码中找到错误吗:

INSERT INTO FMS_LOG (FL_ID,FL_USER_ID, FL_OFFICE_ID, FL_DATETIME,
                     FL_IP,FL_FISCAL_YEAR,FL_USER_NAME,FL_USER_ADDRESS) 
VALUES 
( 105, 18, 18, 
  TO_DATE('03/Jan/2013 15:51:33PM','DD/MON/YY HH:MI:SSAM'), 
 '127.0.0.1',
 '2069/70', 
 'dordhankuta', 
 'balaju' );

FL_DATETIME has field type DATE

FL_DATETIME 的字段类型为DATE

This is throwing error:

这是抛出错误:

ORA-01861: literal does not match format string

Server side code:

服务器端代码:

    $this->db->query("
    INSERT INTO FMS_LOG (FL_ID,FL_USER_ID, FL_OFFICE_ID, FL_DATETIME, FL_IP,FL_FISCAL_YEAR,FL_USER_NAME,FL_USER_ADDRESS) 
    VALUES 
        (
        $next_id,
        $userinfo[user_id], 
        $userinfo[user_office_id],
        TO_DATE('".date('d/M/Y H:i:sA', time()+20700)."','DD/MON/YY HH:MI:SSAM'),
        '$client_ip',
        '$fiscal_year',
        '$userinfo[user_full_name]',
        '$address'
        )        
    ");

回答by Florin Ghita

First, 15PM does not exist. Second, years mask should be yyyy, not yy

首先,15PM 不存在。二、岁月面具应该是yyyy,不是yy

this works:

这有效:

select  TO_DATE('03/Jan/2013 15:51:33','DD/MON/YYYY HH24:MI:SS') from dual;

If you want to use AM/PM be sure the hour is between 1 and 12 and this would work:

如果您想使用 AM/PM,请确保小时在 1 到 12 之间,这将起作用:

select  TO_DATE('03/Jan/2013 5:51:33PM','DD/MON/YYYY HH:MI:SSAM') from dual;