我使用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的评论。
答案 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