ORACLE sqlldr LOAD实用程序 - 日期格式

时间:2015-03-09 03:54:59

标签: java database oracle

我使用sqlldr加载功能将数据加载到Oracle的TPC-H表中。例如,orders.ctl文件具有以下内容。

load data
INFILE 'orders.tbl'
INTO TABLE ORDERS
FIELDS TERMINATED BY '|'
(O_ORDERKEY, O_CUSTKEY, O_ORDERSTATUS, O_TOTALPRICE, O_ORDERDATE DATE 
 'YYYY-MM-DD', O_ORDERPRIORITY, O_CLERK, O_SHIPPRIORITY, O_COMMENT)

将数据加载到订单表后,我发现DATE格式不在' YYYY-MM-DD'但格式为“DD-MON-YY'”。为什么Oracle不使用我提到的格式?

有什么建议吗?

谢谢!

编辑:添加java标记,因为它涉及将作为字符串传递的日期值转换为java方法,以将其转换回Date格式。请参阅@Justin Cave的评论。

1 个答案:

答案 0 :(得分:0)

Oracle中的date列没有格式。表示日期的字符串具有格式。 date始终以二进制格式存储,该格式不是特别人类可读的。请注意,即使您的客户没有显示,Oracle date也始终包含时间组件。

我的猜测是,你说当你在已经完成Oracle客户端的默认美英安装的机器上打开SQL * Plus时,连接到数据库,然后执行

SELECT o_orderdate
  FROM orders

显示的日期格式为DD-MON-RR。这是因为客户端需要将date转换为字符串表示以便显示它。如果您依赖隐式数据类型转换,客户端将使用您的会话NLS_DATE_FORMAT进行转换。在美国安装英语的默认设置是NLS_DATE_FORMAT" DD-MON-RR"。每个会话都有自己的NLS_DATE_FORMAT,因为每个用户都希望以不同的格式显示日期。

如果要以特定格式显示日期的字符串表示形式,您需要使用to_char函数

来使用显式数据类型转换
SELECT to_char( o_orderdate, 'YYYY-MM-DD' )
  FROM orders