我正在使用Oracle 9,但系统也适用于Oracle 8和10.
问题是:日期字段不能存储超过秒的任何内容,但我存储的是一系列以毫秒精度发生的事件。显而易见的解决方案是创建一个新列来存储毫秒。但这是更好的解决方案吗?
对我来说这似乎并不是很聪明,因为这样做会强制我所有的查询(有很多查询)都需要修改ORDER BY子句。
答案 0 :(得分:2)
您可以使用时间戳类型。这是一个很好的解释:
尽管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。希望这有助于在遗留系统上工作的人。