1

このタイプの形式で日付をOracleにインポートする必要があります

2008年6月3日

これが以前に行われたのを見た唯一の例にはダッシュがあり、これにはありません。

それを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日までに送信されたすべてのユーザーコメントをカウントするなど、1日の終わりに対してテストするとします。上記の日付と比較すると、すべてのコメントは00:00プラス時間に行われるため、その日に行われたすべてのコメントが除外されることになります。

したがって、その場合は、たとえば次のように、本当に1日の終わりにするための時間を追加する必要があります。

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

それはあなたに与えるでしょう:

03-JUN-2008 23:59:59
于 2009-05-12T20:31:31.453 に答える