我正在使用Oracle SQL Developer 3.0.03。我正在尝试将Excel文件上传到Oracle数据表。我收到错误的日期。数据库中的列是时间戳,我不知道将什么放入“数据加载向导”的日期格式。如果我使用以下格式(dd-mom-yy hh.mi.ss),SQL Developer将显示以下错误:
--Insert failed for row 1 TIMESTAMP_COLUMN GDK-05047: A day of the month must be between 1 and the last day of the month.
--Row 1
INSERT INTO TABLE_1 (Column1, Column2, Column3, TIMESTAMP_COLUMN) VALUES ('Some Text','Some Text','Some more text',to_timestamp('40604.0', 'dd-mon-yy hh.mi.ss'));
IN EXCEL的默认数字格式为:40604.0 如果您将单元格更改为短日期格式,您将获得:2011年3月2日
我想弄清楚我需要将'格式'放入'数据加载向导'的FORMAT部分,该部分将接受EXCEL中的日期格式并将其作为TIMESTAMP上传到Oracle。
答案 0 :(得分:1)
我今天遇到了同样的事情,并且“固定”了这两种方式。第二种方式可能看起来过于复杂,但如果他们很难将日期格式化自动化为Oracle的标准dd-mmm-yy,那么它可能对某人有所帮助。
TO_DATE(date_field,'MM/DD/YYYY')
从临时文本表格中编写手动插入语句
答案 1 :(得分:0)
“该月的某一天必须介于1和该月的最后一天之间。”
1)这些小数是如何创建的?
2)这是“ 04-06-2004 ”吗?或者从1970年开始这几秒钟?
您需要添加有关此数字格式的更多详细信息!
答案 2 :(得分:0)
Excel“零”日期是1月0日(是,零),1900年。由于Oracle无法处理一个月内的“零”日,您需要从Excel值中减去1;因此,以下内容可以让您接近您想要的内容:
SELECT CAST(TO_DATE('01-JAN-1900 00:00:00', 'DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP) +
NUMTODSINTERVAL(41017.6361109954 - 1, 'DAY')
FROM DUAL
就“如何导入它”而言,没有Oracle日期格式,我知道这样做。最简单的方法是将值导入NUMBER列,然后运行脚本进行日期转换。
分享并享受。