我必须使用这种格式
将日期导入oracle03JUN2008
我之前见过的唯一一个例子是破折号,但事实并非如此。
我应该把它作为varchar并进行操作还是以其他方式进行?
由于
答案 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,这里的例子和细节来做到这一点
答案 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