在Oracle日期列中存储日期和时间
我正在使用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”类型的列,但我不认为是最好的解决方案,因为毫秒占用了不必要的空间。
任何想法?
在此先感谢。
如果您为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;
请参阅从Oracle DATE definition这种提取物:
DATE数据类型
DATE数据类型存储日期和时间信息。 尽管日期和时间信息可以在 字符和数字数据类型中表示,但DATE数据类型具有特殊的 关联属性。对于每个DATE值,Oracle将 以下信息存储在:世纪,年,月,日,小时,分钟和 秒。
嗨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- 最后,非常感谢你解决我的问题。 –
:-)随时接受/ upvote我的答案 – Jan
请看这里 - Oracle **有** TIME数据类型:http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj21908.html - 关于另一个想法:你如何看待2006-02-02插入?为什么你使用DATE作为目标字段而不是TIMESTAMP? – Jan
@Jan,我不认为这个链接是正确的。这是“java db”,而不是oracle数据库。 – OldProgrammer
对。错误的链接。再次说明:oracle DATE列das有一个时间部分:https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm#i1006006 - 请参阅我的更新答案。 – Jan