Oracle中如何截断TIMESTAMP字段毫秒数并保留3位精度
解决Oracle中TIMESTAMP保留3位毫秒精度的视图创建问题
针对你的需求,在Oracle数据库里可以非常简洁地实现——利用CAST函数直接将原TIMESTAMP字段转换为指定精度的TIMESTAMP类型,就能自动截断多余的毫秒位,完全符合你要的效果。
核心解决方案
创建视图时,对CRTE_DTM和END_DTM字段使用CAST(字段 AS TIMESTAMP(3))处理,其中TIMESTAMP(3)表示保留3位小数秒(也就是毫秒精度)。
完整视图创建SQL示例
CREATE OR REPLACE VIEW EMPLOYEE_VW AS SELECT -- 这里保留你需要的其他字段,比如员工ID、姓名等 EMPLOYEE_ID, FIRST_NAME, LAST_NAME, -- 处理时间字段,保留3位毫秒 CAST(CRTE_DTM AS TIMESTAMP(3)) AS CRTE_DTM, CAST(END_DTM AS TIMESTAMP(3)) AS END_DTM FROM EMPLOYEE;
效果验证
比如你提到的原数据:10-SEP-02 02.10.10.123000000 PM,经过CAST处理后,会自动截断为10-SEP-02 02.10.10.123 PM,而且返回的依然是TIMESTAMP类型,不是字符串,完美满足你的要求。
补充:如果需要四舍五入(而非截断)
如果你的场景需要对毫秒位进行四舍五入(比如原数据是.123500要变成.124),可以用字符串转换的方式实现:
TO_TIMESTAMP(TO_CHAR(CRTE_DTM, 'DD-MON-RR HH.MI.SS.FF3 AM'), 'DD-MON-RR HH.MI.SS.FF3 AM') AS CRTE_DTM
不过根据你的示例,截断的方式应该更贴合需求,所以优先推荐CAST方法,它的性能也更优。
内容的提问来源于stack exchange,提问作者SitGeek
相关产品推荐
相关产品推荐

