Java ORACLE sqlldr加载实用程序-日期格式

Java ORACLE sqlldr加载实用程序-日期格式,java,database,oracle,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_SHIPP

我正在使用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)
将数据加载到Orders表后,我发现日期格式不是'YYYY-MM-DD',而是'DD-MON-YY'格式。为什么Oracle不使用我提到的格式

有什么建议吗

谢谢


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

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

我猜您是说,当您在一台机器上打开SQL*Plus时,您已经完成了Oracle客户端的默认美式英语安装,连接到数据库,然后执行以下操作:

SELECT o_orderdate
  FROM orders
显示的日期的格式为
DD-MON-RR
。这是因为客户端需要将日期转换为字符串表示形式才能显示它。如果依赖隐式数据类型转换,客户端将使用会话的
NLS\u DATE\u格式
进行转换。在美国,英语语言安装的默认格式为“DD-MON-RR”。每个会话都有自己的
NLS\u DATE\u格式
,因为每个用户都可能希望以不同的格式显示日期

如果要以特定格式显示日期的字符串表示形式,则需要使用
to_char
函数进行显式数据类型转换

SELECT to_char( o_orderdate, 'YYYY-MM-DD' )
  FROM orders

我面临的问题是这个。我将日期值作为字符串传递给java方法,然后使用java.sql.date.valueOf(strVal)进行转换。此方法需要YYYY-MM-DD格式的字符串,否则会引发错误。现在我不知道Oracle数据库中存储的是哪种格式的日期,所以我也不能在java中使用格式化程序。有什么办法吗?@user2761431:不要以字符串形式传递日期。使用
java.sql.Timestamp
并使用
PreparedStatement.setTimestamp()
日期没有“格式”将其传递给preprepred语句。您看到的任何格式都将由用于查看数据的SQL客户端应用