在Oracle中存储毫秒的最佳方法是什么?

时间:2009-03-11 02:54:23

标签: oracle

我正在使用Oracle 9,但系统也适用于Oracle 8和10.

问题是:日期字段不能存储超过秒的任何内容,但我存储的是一系列以毫秒精度发生的事件。显而易见的解决方案是创建一个新列来存储毫秒。但这是更好的解决方案吗?

对我来说这似乎并不是很聪明,因为这样做会强制我所有的查询(有很多查询)都需要修改ORDER BY子句。

5 个答案:

答案 0 :(得分:2)

您可以使用时间戳类型。这是一个很好的解释:

http://it.toolbox.com/blogs/database-solutions/a-comparison-of-oracles-date-and-timestamp-datatypes-6681

尽管Oracle 8中不支持它。

答案 1 :(得分:2)

在Oracle 8中,你必须做一个解决方法(varchar字段或两个字段,一个日期时间和第二个以保持毫秒)

如果您可以以某种方式避免在Oracle 8中执行此操作的要求,请考虑TIMESTAMP数据类型。

答案 2 :(得分:0)

我建议您选择支持Oracle 8(即将停止服务,如果它尚未停止服务)和毫秒级支持。在这两者中,我建议放弃Oracle 8,只支持Oracle 9或更高版本。

[公平披露:我为竞争对手工作 - 我甚至建议转投我们。如果我的Oracle 8上的信息不合适,那就很抱歉。但是这个建议并没有像我所说的那样毫无偏见。]

答案 3 :(得分:0)

如前所述,timestamp是oracle 9及更高版本中的数据类型,它支持您要查找的毫秒精度。如果你想支持oracle 8,那么你将不得不使用varchar2(25)来存储值。在oracle8中,您必须使用java函数或外部程序来获得存储在表的varchar2列中的毫秒精度。

答案 4 :(得分:0)

可能来不及遇到这个帖子。但对于不支持Timestamp的早期Oracle版本。可以始终在Long数据类型列中存储Timestamp的值。在存储到DB中时,可以在java中保存timestamp.getTime(),返回long。在从DB读取数据时,可以通过在Timestamp构造函数中提供它来读取long值并创建Timestamp。希望这有助于在遗留系统上工作的人。