You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何将Timestamp截断至毫秒精度

将Oracle微秒精度Timestamp转换为毫秒精度的方法

刚好处理过类似的需求,下面分享几种纯SQL和PL/SQL的实现方式,都能把CURRENT_TIMESTAMP生成的6位微秒精度时间转成3位毫秒精度的Timestamp,直接可以存储到对应字段里:

方法一:字符串转换法(SQL/PL/SQL通用)

这是最直观的方式,先把Timestamp转成带3位小数的字符串,再转回Timestamp类型:

-- SQL示例
SELECT CAST(TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') AS TIMESTAMP) 
FROM dual;

如果是在PL/SQL块里使用:

DECLARE
    target_ts TIMESTAMP;
BEGIN
    target_ts := CAST(TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') AS TIMESTAMP);
    -- 这里可以执行插入或更新操作,比如 INSERT INTO your_table(ts_column) VALUES(target_ts);
END;
/

原理:FF3格式符指定只保留3位小数(毫秒级),转换后再CAST回Timestamp,就得到了想要的精度。

方法二:日期截断与区间计算法(纯SQL)

通过提取时间各部分并重新拼接,实现精度截断:

SELECT TRUNC(CURRENT_TIMESTAMP, 'MI') + 
       NUMTODSINTERVAL(EXTRACT(SECOND FROM CURRENT_TIMESTAMP), 'SECOND') +
       NUMTODSINTERVAL(FLOOR(EXTRACT(MILLISECOND FROM CURRENT_TIMESTAMP)/1000)*1000, 'MILLISECOND')
FROM dual;

解释:

  1. TRUNC(CURRENT_TIMESTAMP, 'MI') 把时间截断到分钟
  2. 加上提取的秒部分
  3. 提取毫秒部分后取整到千位(即保留前3位),再转成时间区间加回去

方法三:字段精度限制法(最省心)

如果是要存储到表中,直接在创建表时指定Timestamp字段的精度为3:

CREATE TABLE your_table (
    ts_column TIMESTAMP(3) -- 明确指定3位小数精度(毫秒级)
);

-- 插入时直接用CURRENT_TIMESTAMP,Oracle会自动截断到3位小数
INSERT INTO your_table(ts_column) VALUES(CURRENT_TIMESTAMP);

这种方式不需要额外转换,插入时数据库自动处理精度截断,非常适合长期存储的场景。

内容的提问来源于stack exchange,提问作者Bastian Voigt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:32