【问题标题】:ORACLE sqlldr LOAD Utility - Date formatORACLE sqlldr LOAD 实用程序 - 日期格式
【发布时间】:2015-03-09 03:54:58
【问题描述】:

我正在使用 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 表后,我发现 DATE 格式不是“YYYY-MM-DD”,而是“DD-MON-YY”格式。为什么 Oracle 不使用我提到的格式?

有什么建议吗?

谢谢!

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

【问题讨论】:

  • 日期没有“格式”。您看到的任何格式都由您用于查看数据的 SQL 客户端应用

标签: java database oracle


【解决方案1】:

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

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

SELECT o_orderdate
  FROM orders

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

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

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

【讨论】:

  • 我面临的问题是这个。我将日期值作为字符串传递给 java 方法,然后使用 java.sql.Date.valueOf(strVal) 进行转换。此方法需要 YYYY-MM-DD 格式的字符串,否则会引发错误。现在我不知道 Oracle 数据库中存储的日期格式,所以我也无法在 java 中使用格式化程序。有什么办法吗?
  • @user2761431:not 将日期作为字符串传递。使用 java.sql.Timestamp 并使用 PreparedStatement.setTimestamp() 将其传递给您的预先声明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多