ORA-01830错误 - 将字符串转换为日期对象

时间:2015-04-09 14:38:12

标签: oracle date timestamp str-to-date

我需要在oracle中将字符串转换为日期对象。由于所有这些都是通过sql-loader(sqlldr)在shell脚本中运行的,所以我既不能修改也不能查看代码。我可以设置的唯一参数是转换过程的格式字符串。

输入字符串看起来总是一样:' 2015年3月11日7:37:53:060PM'

  1. 尝试:我创建了一个这样的格式:&#39; Mon dd YYYY HH:mi:ss:ff3AM&#39; ,但我无法运行它,因为我遇到了这个错误消息: &#34; kgepop:没有错误框架弹出错误1821&#34; (我假设这是针对ORA-01821:日期格式无法识别的) 我认为这是因为&#34; ss:ff3AM&#34;,因为我发现显然< strong> to_date 函数无法读取毫秒和AM / PM作为输入参数(如果我错了,请纠正我,我对此不是100%肯定)。

  2. 尝试:我创建了一个这样的格式:&#39;星期一YYYY HH:mi:ss&#39; 我希望他可能只是切断剩下的输入字符串,但我遇到 ORA-01830错误(&#34;日期格式图片在转换整个输入字符串&#34之前结束;)

  3. 因为我假设,脚本做了这样的事情:

    to_date('MAR 11 2015  7:37:53:060PM','Mon dd YYYY HH:mi:ss');
    

    有没有办法告诉to_date方法通过format-string切断输入字符串的最后一部分?

    每一个帮助都将受到赞赏!

    修改

    我遗憾的是无法使用to_timestamp方法,因为我无法修改shell脚本功能。所以我必须使用to_date方法:(

2 个答案:

答案 0 :(得分:2)

DATE数据类型不支持毫秒。但是,TIMESTAMP数据类型支持它们就好了。请尝试TO_TIMESTAMP而不是TO_DATE

答案 1 :(得分:1)

这对我有用

SELECT to_TIMESTAMP('Mar 11 2015 7:37:53:060PM','Mon dd YYYY HH12:mi:ss:FF3AM') FROM dual;

产量

11-MAR-15 07.37.53.060000000 PM

然后你可以截断额外的空精度