2017-05-31 157 views
2

我正在使用JPA和JEE将DB2表迁移到Oracle数据库。因此,我遇到了“日期”和“时间”类型列的问题。更具体地说,在Oracle中没有数据类型“Time”,所以我试图从DB2中存储Oracle的类型“Date”列中的2列(Date类型和Time类型中的另一个类型)的并置数据库。这样一来,我告诉你我是如何在Oracle数据库中定义的列和映射我定义:在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)); 

即使如此,虽然覆盖了信息化工作变量被正确地告知,该部分指的是时间存储和未插入数据库中:

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

我一直在尝试一些工作几个小时没有使它的工作。即便如此,如果我设法使用“Timestamp”类型的列,但我不认为是最好的解决方案,因为毫秒占用了不必要的空间。

任何想法?

在此先感谢。

+0

请看这里 - Oracle **有** TIME数据类型:http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj21908.html - 关于另一个想法:你如何看待2006-02-02插入?为什么你使用DATE作为目标字段而不是TIMESTAMP? – Jan

+0

@Jan,我不认为这个链接是正确的。这是“java db”,而不是oracle数据库。 – OldProgrammer

+0

对。错误的链接。再次说明:oracle DATE列das有一个时间部分: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-the-time-how-do-i-fix- 最后,非常感谢你解决我的问题。 –

+0

:-)随时接受/ upvote我的答案 – Jan