导入日期格式mmddyyyy

时间:2009-05-06 21:59:15

标签: oracle import date sql-loader

我必须使用这种格式

将日期导入oracle

03JUN2008

我之前见过的唯一一个例子是破折号,但事实并非如此。

我应该把它作为varchar并进行操作还是以其他方式进行?

由于

3 个答案:

答案 0 :(得分:3)

如果它是一个日期,然后将其存储为日期,请不要将其存储为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@:> 

答案 1 :(得分:2)

我不知道我是否完全理解你的意思,但我认为你可以通过TO_DATE,这里的例子和细节来做到这一点

http://www.techonthenet.com/oracle/functions/to_date.php

答案 2 :(得分:0)

为了得到一个好的答案,您必须提前考虑在Oracle如何在内部存储日期的情况下您将如何处理这些日期。

例如,如果你这样做

to_date('03JUN2008','DDMONYYYY')
正如马修建议的那样,你真正得到的是:

03-JUN-2008 00:00:00

为什么会出现问题?假设您使用该日期来测试结束日期,例如计算所有提交的用户评论,包括06/03/2008。如果您与上述日期进行比较,您将最终排除在该日期发表的所有评论,因为它们都将在00:00加上小时进行。

因此,在这种情况下,您需要添加时间以使其真正结束一天,例如:

to_date('03JUN2008','DDMONYYYY')+0.999988425925926

会给你:

03-JUN-2008 23:59:59