【发布时间】:2018-04-30 19:04:55
【问题描述】:
我有一个表EMPLOYEE,它有两个TIMESTAMP 字段"CRTE_DTM" 和"END_DTM"。
我想在顶部 EMPLOYEE 表上创建一个视图,我可以在这两个字段上放置一些函数以返回 TIMESTAMP,精度仅为 3 毫秒。
例子:
如果我在EMPLOYEE 表中有以下行
CRTE_DTM
----------------
10-SEP-02 02.10.10.123000000 PM
我想将时间戳修剪为只有 3 毫秒精度,见下文,
CRTE_DTM
----------------
10-SEP-02 02.10.10.123 PM
注意:我正在使用此视图将数据加载到表中,其中 "CRTE_DTM" 和 "END_DTM" 字段是 TIMESTAMP 的
【问题讨论】:
-
"TRIM" 是字符串操作,不是日期或时间戳操作。日期和时间戳(如数字)可以截断或四舍五入。你需要哪一个?或者,尽管时间戳字段具有更高的规定精度,但您的所有时间戳是否都只有小数点后三位的秒数?其他人已经提供的一种解决方案是将新列定义为数据类型
timestamp(3),并允许Oracle 在将旧表中的值插入新表的过程中进行舍入。这将四舍五入到最接近的毫秒,可以吗? -
您显示的两个时间戳是相同的。就像数字 12.34 和 12.34000 一样;小数点后面的尾随零不会更改值。所以没有问题。如果您应该拥有像 02:10:10.1234 这样的时间部分的数据,那么仍然没有真正的问题,因为您始终可以仅以三位数的精度显示它们。如果您确实想防止数据库存储超过三位的十进制精度,请将您的列定义为
timestamp(3)。