我必须使用这种格式将日期导入 oracle
03JUN2008
我之前见过的唯一一个例子是破折号,而这个没有。
我应该将它作为 varchar 引入并进行操作还是有其他方法?
谢谢
我必须使用这种格式将日期导入 oracle
03JUN2008
我之前见过的唯一一个例子是破折号,而这个没有。
我应该将它作为 varchar 引入并进行操作还是有其他方法?
谢谢
如果它是日期,则将其存储为日期,不要将其存储为 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
为什么这会是个问题?假设您使用该日期针对一天结束进行测试,例如计算截至 2008 年 6 月 3 日(包括)提交的所有用户评论。如果您与上述日期进行比较,您最终将排除在该日期发表的所有评论,因为它们都将在 00:00 加时进行。
因此,在这种情况下,您将需要添加时间以使其真正结束一天,例如:
to_date('03JUN2008','DDMONYYYY')+0.999988425925926
这会给你:
03-JUN-2008 23:59:59