1

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

输入字符串看起来总是一样的:'Mar 11 2015 7:37:53:060PM'

  1. 尝试:我创建了这样的格式:'Mon dd YYYY HH:mi:ss:ff3AM',但我无法运行它,因为我遇到了这个错误消息:“kgepop: no error frame to pop to for error 1821 " (我假设这与 ORA-01821: 日期格式无法识别)我假设这是因为 "ss:ff3AM",因为我发现显然to_date函数无法读取毫秒和 AM/PM 作为一个输入参数(如果我错了,请纠正我,我对此不是 100% 确定)。

  2. 尝试:我创建了这样的格式:'Mon dd YYYY HH:mi:ss',我希望他可能只是切断输入字符串的其余部分,但我遇到了ORA-01830 错误(“日期格式图片在转换之前结束整个输入字符串")

因此,我假设脚本执行以下操作:

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

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

每一个帮助将不胜感激!

编辑

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

4

2 回答 2

2

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

于 2015-04-09T14:50:40.497 回答
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

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

于 2015-04-09T14:55:46.793 回答