2017-05-31 14 views
2

JPAとJEEを使用してDB2表をOracleデータベースに移行します。このため、「Date」と「Time」タイプの列に問題があります。具体的には、Oracleでは "Time"というデータ型がないので、Oracleの "Date"型の列に2列(Date型とTime型のいずれか)の連結をDB2から格納しようとしていますデータベース。情報をカバーし、作業変数が正しく通知されるが、時間を参照する部分があり、たとえそうであっても日付と時刻をOracle日付列に格納

, DATA_HORA_CREACIO DATE DEFAULT 
TO_DATE('0001-01-01-00.00.00','YYYY-MM-DD-HH24.MI.SS') 
NOT NULL 

private Date dataHoraCreacio; 

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "DATA_HORA_CREACIO", nullable = false) 
public Date getDataHoraCreacio() { 
    return this.dataHoraCreacio; 
} 

public void setDataHoraCreacio(Date dataHoraCreacio) { 
    this.dataHoraCreacio = dataHoraCreacio; 
} 

SimpleDateFormat sdfDateHour = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss"); 
String data = sdfDate.format(comandaAvariaDb2.getId().getDataCreacio()); 
String hora = sdfHour.format(comandaAvariaDb2.getId().getHoraCreacio()); 
comandaAvariaOraId.setDataHoraCreacio(sdfDateHour.parse(data + "-" + hora)); 

:この方法では、私は、Oracleデータベースと私は定義されたマッピングで列を定義した方法を説明しますデータベースに格納されていません:

Variable working data: Thu Feb 02 18:42:53 CET 2006 
DataBase inserted Value: 2006-02-02 

私はそれを動作させずに数時間試しています。それでも、「タイムスタンプ」型の列を扱うことができたとしても、ミリ秒が不必要なスペースを占めるため、私は最善の解決法を考えていません。

アイデア?

ありがとうございます。

+0

ここをクリックしてください - Oracle **は** TIMEデータ型を持っています:http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj21908.html - 他のアイデアについて:あなたはどのように見えますか? 2006-02-02が挿入されましたか?なぜTIMESTAMPではなく、DATEをターゲットフィールドに使用していますか? – Jan

+0

@ジャーン、私はリンクが正しいとは思わない。これはoracleデータベースではなく、 "java db"に対するものです。 – OldProgrammer

+0

右。間違ったリンク。再度:oracle DATE列には、次の時間部分があります。https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm#i1006006 - 更新された回答を参照してください。 – Jan

答えて

0

DATA_HORA_CREACIOにOracle DATE値を使用する場合は、DB2からタイムスタンプを直接挿入できる必要があります。これは、出力のための任意のヒントなしでDATE列を選択すると、あなたのディスプレイでのみ日付の部分を与えるだけのことだ:

CREATE TABLE STACK2 
     (DATA_HORA_CREACIO DATE 
    DEFAULT TO_DATE('0001-01-01-00.00.00', 
     'YYYY-MM-DD-HH24.MI.SS') NOT NULL); 

INSERT INTO STACK2 VALUES 
    (TO_DATE('2017-05-30-16.47.32','YYYY-MM-DD-HH24.MI.SS')); 

SELECT DATA_HORA_CREACIO, 
     TO_CHAR(DATA_HORA_CREACIO, 'YYYY-MM-DD'), 
     TO_CHAR(DATA_HORA_CREACIO, 'HH24:MI:SS') FROM STACK2; 

結果は次のとおりです。 enter image description here

Oracle DATE definitionからこのエキスを参照してください:

DATEデータ型

DATEデータ型には、日付と時刻の情報が格納されます。 日付と時刻の情報は、 の文字データ型と数字データ型の両方で表すことができますが、DATEデータ型には特殊な関連プロパティーがあります( )。 DATE値ごとに、Oracleには、世紀、年、月、日、時、分、および 秒の情報を含む が格納されます。

+1

こんにちは1月 あなたが何を指示しているかを確認した後、私はあなたが絶対に正しいと言わなければなりません。実際には、日付と時刻を格納しています。したがって疑念が生じます。また、SQLDEVELOPERで、 "DATE"タイプの列が日付 - 時刻として表示されるようにマスクを変更することができます。 YYYY-MM-DD-HH24.MI.SSこのリンクは、次の方法を説明しています。https:// stackoverflow。 com/questions/12628385/sql-developer-is-returning-only-the-date-not-do-i-fix-this 最後に、私の問題を解決してくれてありがとうございました。 –

+0

:-)私の答えを受け入れるか自由にしてください – Jan