我需要在oracle中将字符串转换为日期对象。由于所有这些都是通过sql-loader(sqlldr)在shell脚本中运行的,所以我既不能修改也不能查看代码。我可以设置的唯一参数是转换过程的格式字符串。
输入字符串看起来总是一样:' 2015年3月11日7:37:53:060PM'
尝试:我创建了一个这样的格式:&#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%肯定)。
尝试:我创建了一个这样的格式:&#39;星期一YYYY HH:mi:ss&#39; 我希望他可能只是切断剩下的输入字符串,但我遇到 ORA-01830错误(&#34;日期格式图片在转换整个输入字符串&#34之前结束;)
因为我假设,脚本做了这样的事情:
to_date('MAR 11 2015 7:37:53:060PM','Mon dd YYYY HH:mi:ss');
有没有办法告诉to_date方法通过format-string切断输入字符串的最后一部分?
每一个帮助都将受到赞赏!
修改
我遗憾的是无法使用to_timestamp方法,因为我无法修改shell脚本功能。所以我必须使用to_date方法:(
答案 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
然后你可以截断额外的空精度