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

ORA-01830 Error - converting a string to a date object

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

输入的字符串看起来总是一样的:'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错误("date format picture ends before converting entire input string")

正因为如此,我假设脚本会执行如下操作:

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

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

我们将不胜感激!

编辑

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

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

这对我有用

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

那你可以截断多余的空精度