【发布时间】:2017-01-27 20:36:39
【问题描述】:
我需要加载一个包含日期“20140825145416”的 .csv 文件的表格。
我尝试在我的控制文件中使用 (DT date "yyyymmdd hh24:mm:ss")。
它会抛出一个错误,如 ORA-01821:日期格式无法识别
我要求表格中的数据为“MM/DD/YYYY HH:MM:SS”。
样本数据:20140825145416
提前致谢。
【问题讨论】:
标签: oracle sql-loader
我需要加载一个包含日期“20140825145416”的 .csv 文件的表格。
我尝试在我的控制文件中使用 (DT date "yyyymmdd hh24:mm:ss")。
它会抛出一个错误,如 ORA-01821:日期格式无法识别
我要求表格中的数据为“MM/DD/YYYY HH:MM:SS”。
样本数据:20140825145416
提前致谢。
【问题讨论】:
标签: oracle sql-loader
好吧,如果我没有指出正确的答案是永远不要将日期存储为 VARCHAR2 数据,而是将其设置为适当的 DATE 列并像这样加载它,那我就失职了:
DT DATE "YYYYMMDDHH24MISS"
选择时完成格式化。如果您需要在计算中使用该日期,这将使您的生活变得更加轻松。
顺便说一句,如果您无法控制数据库并且必须将其存储为 VARCHAR2,请先转换为日期,然后在插入之前使用 to_char 对其进行格式化:
DT CHAR "to_char(to_date(:DT, 'YYYYMMDDHH24MISS'), 'MM/DD/YYYY HH24:MI:SS')"
注意“MI”用于表示分钟。您在几分钟内再次使用“MM”(月)时出现拼写错误。
【讨论】:
我知道在上一个答案中已经说过,但它是如此重要,值得重复。不要将日期存储为 varchars !!
【讨论】:
如果您的 DT 列是时间戳,那么这可能会起作用
DT CHAR(25) date_format TIMESTAMP mask "yyyymmddhhmiss"
我在外部表中使用了类似的东西。也许这可能会有所帮助 https://docs.oracle.com/cd/B19306_01/server.102/b14215/et_concepts.htm 和 https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:8128892010789
【讨论】: