社区
基础和管理
帖子详情
急,在线等,涉及到毫秒的oracle中时间加减的问题
duckliao
2008-02-27 09:51:53
要求我编写PC文件处理数据库里面一张表里的data_time这个字段的值,这个值是以yyyymmddhhmisst这样的格式存放的,就像这样200711221246576的值,现在要求对这个字段的值进行加减时间的操作,然后重新更新,要求能够处理加减yyyy或者yy或者mm或者dd或者hh或者hhh或者mi或者ss或者t这几种格式的操作,求各位给点方法,怎么来处理这个问题?不胜感激!
...全文
693
6
打赏
收藏
急,在线等,涉及到毫秒的oracle中时间加减的问题
要求我编写PC文件处理数据库里面一张表里的data_time这个字段的值,这个值是以yyyymmddhhmisst这样的格式存放的,就像这样200711221246576的值,现在要求对这个字段的值进行加减时间的操作,然后重新更新,要求能够处理加减yyyy或者yy或者mm或者dd或者hh或者hhh或者mi或者ss或者t这几种格式的操作,求各位给点方法,怎么来处理这个问题?不胜感激!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
duckliao
2008-02-29
打赏
举报
回复
我用的AIX,这个问题已经解决了,直接构造像这样的语句
/* 12小时制 */
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtoyminterval(1,'year'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtoyminterval(1,'month'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtodsinterval(1,'day'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtodsinterval(1,'hour'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtodsinterval(1,'minute'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtodsinterval(1,'second'),'YYYYMMDDHHMISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHHMISSFF')+numtodsinterval(5/10,'second'),'YYYYMMDDHHMISSFF1');
/* 24小时制 */
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtoyminterval(1,'year'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtoyminterval(1,'month'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtodsinterval(1,'day'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtodsinterval(1,'hour'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtodsinterval(1,'minute'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtodsinterval(1,'second'),'YYYYMMDDHH24MISSFF1');
update TESTTIME set time=to_char(TO_TIMESTAMP(time, 'YYYYMMDDHH24MISSFF')+numtodsinterval(5/10,'second'),'YYYYMMDDHH24MISSFF1');
然后再用EXECUTE语句执行,搞定,因为开始我就是想到先用select语句导出来用C来处理,但是觉得有点恐怖,所以一直在试直接用数据库语句来执行,多谢codearts兄提供的思路和方法,很有收获!
codearts
2008-02-27
打赏
举报
回复
SQL> create table t(a timestamp);
表已创建。
SQL> insert into t(a) values(systimestamp);
已创建 1 行。
SQL> update t set a=a+numtodsinterval(1,'day') --加一天
2 ;
已更新 1 行。
SQL> update t set a=a+numtodsinterval(1,'hour') --加一小时
2 ;
已更新 1 行。
SQL> update t set a=a+numtodsinterval(1,'second') --加一秒
2 ;
已更新 1 行。
SQL> update t set a=a+numtodsinterval(500/1000,'second') --加500毫秒
2 ;
已更新 1 行。
SQL> select * from t;
A
---------------------------------------------------------------------------
2008-02-28 12:35:34.546000
codearts
2008-02-27
打赏
举报
回复
date类型不能到毫秒的,要用timestamp类型.
用numtodsinterval这个函数进行加减(毫秒的还没找到)
select sysdate + numtodsinterval(150, 'DAY') from dual;
numtodsinterval(1500, 'HOUR')
numtodsinterval(15000, 'MINUTE')
numtodsinterval(150000, 'SECOND')
Petergepeter
2008-02-27
打赏
举报
回复
select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;
duckliao
2008-02-27
打赏
举报
回复
但是现在这个字段的值是varchar2类型的值,如何转换为timestamp类型的值呢?
Petergepeter
2008-02-27
打赏
举报
回复
恩,不错!
学到了,可以到微秒:
SELECT systimestamp,systimestamp+numtodsinterval(1/1000000,'second')
FROM dual;
最新
Oracle
中
日期格式字段处理.docx
。。。
Oracle
学习笔记
oracle
学习笔记,学习总结,学习用
支付宝Java工程师笔试题
Java工程师支付宝笔试题
关于
Oracle
毫秒
加减
的
问题
初学
Oracle
,将SqlServer
中
的函数翻译为
Oracle
函数遇到一个
问题
,关于
毫秒
的
加减
,由于网上相关
问题
较少,现将解决方法写出来供大家参考。
涉及
到
毫秒
,就不能使用date类型了,需改为timestamp类型,timestamp类型支持到
毫秒
。 date转timestamp:to_timestamp('2019-03-18','yyyy-MM-dd HH24:MI:ss.ff'); ...
oracle
中
日期计算
首先在
oracle
中
没有datediff()函数 可以用以下方法在
oracle
中
实现该函数的功能: 1.利用日期间的
加减
运算 天: ROUND(TO_NUMBER(END_DATE - START_DATE)) 小时: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24) 分钟: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60) 秒: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24.
基础和管理
17,381
社区成员
95,118
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章