Oracle时间戳与毫秒值

本文介绍了两种在Oracle数据库中存储毫秒级时间的方法:一是通过复杂的SQL语句转换timestamp类型为毫秒值;二是使用Java获取当前时间的毫秒值后直接存入数据库。

在日常项目中往往会要求时间要以毫秒值的形式插入Oracle数据库中,为此本人也费了不少周折,下面介绍两种形式:

形式一:

drop table table1;

create table table1 (id number(3),time timestamp);

insert into table1 values(3,systimestamp);


select trunc(extract(day from inter) * 24 * 60 * 60 +  

  extract(hour from inter) * 60 * 60 + extract(minute from inter) * 60 +  
    extract(second from inter)) "seconds" from(
  select time -  

    to_timestamp('1970-01-01 00:00:00.000000000', 'yyyy-mm-dd hh24:mi:ss.ff') inter from table1);

上一个SQL语句是以毫秒值的形式查询得出的结果,借此复杂的SQL语句就得出了毫秒值

形式二:

利用Java中System.currentTimeMillis()语句得出毫秒值(13位),然后再插入数据库中,是不是很简单啊。

。。。。。。。。。。。。。。。。。

由于本人能力有限,希望大神能对我写的内容批评指正,不胜感激!

Oracle 数据库中,时间戳日期时间格式的转换可以通过多种方式实现。以下是几种常见的方法和函数,用于将时间戳转换为日期时间格式。 ### 方法一:使用 `TO_DATE` 和 `NUMTODSINTERVAL` 函数 通过 `NUMTODSINTERVAL` 将时间戳(以秒或毫秒为单位)转换为时间间隔,并将其添加到基准日期 `'1970-01-01 08:00:00'` 上。以下是一个示例函数: ```sql CREATE OR REPLACE FUNCTION tamp_to_date (i_timestamp IN NUMBER) RETURN DATE IS r_date DATE; BEGIN SELECT i_timestamp / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss') INTO r_date FROM dual; RETURN r_date; END tamp_to_date; ``` 此函数将时间戳(以毫秒为单位)转换为日期时间格式[^4]。 --- ### 方法二:使用 `TIMESTAMP` 和 `TO_CHAR` 函数 如果时间戳是以字符串形式存储的,可以先提取出时间戳的部分并将其转换为日期时间格式。以下是一个示例函数: ```sql CREATE OR REPLACE FUNCTION func_from_timestamp_str_to_date_str(in_timestamp_str IN VARCHAR2) RETURN VARCHAR2 AS v_result VARCHAR2(100); v_str VARCHAR2(100); v_number NUMBER; BEGIN v_str := SUBSTR(in_timestamp_str, 0, 10); v_number := TO_NUMBER(v_str); v_result := TO_CHAR(TIMESTAMP '1970-01-01 08:00:00' + NUMTODSINTERVAL(v_number, 'SECOND'), 'yyyy-mm-dd hh24:mi:ss'); RETURN v_result; END; ``` 此函数适用于将时间戳字符串转换为日期时间格式[^5]。 --- ### 方法三:直接使用 `TO_TIMESTAMP` 函数 如果时间戳已经是标准的日期时间格式字符串,可以直接使用 `TO_TIMESTAMP` 函数进行转换。例如: ```sql SELECT TO_TIMESTAMP('2023-10-01 12:30:45', 'yyyy-mm-dd hh24:mi:ss') AS result_time FROM dual; ``` 此方法适用于已知时间戳格式的情况[^2]。 --- ### 方法四:结合时区转换 如果需要考虑时区问题,可以使用 `AT TIME ZONE` 子句。例如: ```sql SELECT SYSTIMESTAMP AT TIME ZONE 'UTC' AS utc_time FROM dual; ``` 此方法适用于需要跨时区的时间戳转换[^1]。 --- ### 注意事项 1. 时间戳的单位可能不同(如秒、毫秒等),需根据实际情况调整计算逻辑。 2. 如果时间戳是字符串形式,需确保其格式正确,否则可能导致转换失败。 3. 在处理大量数据时,建议优化函数性能以避免性能瓶颈。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值