1

我必须使用这种格式将日期导入 oracle

03JUN2008

我之前见过的唯一一个例子是破折号,而这个没有。

我应该将它作为 varchar 引入并进行操作还是有其他方法?

谢谢

4

3 回答 3

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@:> 
于 2009-05-07T12:31:05.280 回答
2

我不知道我是否完全明白你的意思,但我认为你可以简单地使用 TO_DATE、示例和详细信息来做到这一点

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

于 2009-05-06T22:04:53.363 回答
0

为了得到一个好的答案,您必须提前考虑在 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
于 2009-05-12T20:31:31.453 回答