【发布时间】:2009-05-06 21:59:14
【问题描述】:
我必须使用这种格式将日期导入到 oracle 中
2008 年 6 月 3 日
我之前见过的唯一一个例子是破折号,而这个没有。
我应该将它作为 varchar 引入并进行操作还是有其他方法?
谢谢
【问题讨论】:
标签: oracle import date sql-loader
我必须使用这种格式将日期导入到 oracle 中
2008 年 6 月 3 日
我之前见过的唯一一个例子是破折号,而这个没有。
我应该将它作为 varchar 引入并进行操作还是有其他方法?
谢谢
【问题讨论】:
标签: oracle import date sql-loader
如果是日期,则将其存储为日期,不要将其存储为 varchar 或任何类似的废话。
您打算如何“导入”数据?
如果你只是使用sql语句,那么使用TO_DATE
MWATSON@:> create table date_test ( x date );
Table created.
MWATSON@:> insert into date_test values ( to_date('03JUN2008','DDMONYYYY') );
1 row created.
MWATSON@:> select * from date_test;
X
-----------
03-Jun-2008
1 row selected.
MWATSON@DEV2:>
如果您通过 SQL*Loader 导入,您可以在控制文件中指定日期格式
> cat date_test.ldr
LOAD DATA
INFILE *
APPEND
INTO TABLE date_test
FIELDS TERMINATED BY '|'
(x DATE 'DDMONYYYY')
BEGINDATA
01JAN1999
> sqlldr mwatson control=date_test.ldr
....
Commit point reached - logical record count 1
> sqlplus
....
MWATSON:> select * from date_test;
X
-----------
03-Jun-2008
01-Jan-1999
2 rows selected.
MWATSON@:>
【讨论】:
我不知道我是否完全明白你的意思,但我认为你可以简单地使用 TO_DATE、示例和细节来做到这一点
【讨论】:
为了得到一个好的答案,您必须提前考虑在 Oracle 如何在内部存储日期的背景下您将如何处理这些日期。
例如,如果你这样做
to_date('03JUN2008','DDMONYYYY')
正如马修建议的那样,你真正得到的是:
03-JUN-2008 00:00:00
为什么会有这样的问题?假设您使用该日期来针对一天结束进行测试,例如计算截至 06/03/2008(包括 06/03/2008)提交的所有用户 cmets。如果您与上述日期进行比较,您最终将排除在该日期制作的所有 cmets,因为它们都将在 00:00 加时制作。
因此,在这种情况下,您将需要添加时间以使其真正结束一天,例如:
to_date('03JUN2008','DDMONYYYY')+0.999988425925926
这会给你:
03-JUN-2008 23:59:59
【讨论】: