求相对时间的问题

shine333 2003-10-17 12:06:35
请问:
select to_date('20031017021104','YYYYMMDDHHMISS')-to_date('20031017021001','YYYYMMDDHHMISS') from dual;返回的是什么结果?好象不是绝对时间啊?
如果我想求2003-10-10 12:20:11到2003-10-09 14:30:02之间的时间怎么求?
谢谢!!!
...全文
48 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingSunSha 2003-10-24
  • 打赏
  • 举报
回复
再考虑了一下,超过24小时但是小于28天(最短的一个月)的也容易做到,在上面的结果中对日期减一就可以了
SELECT TO_NUMBER(TO_CHAR(TO_DATE ('20000101000000', 'YYYYMMDDHHMISS')
+ TO_DATE ('20031017021104', 'YYYYMMDDHHMISS')
- TO_DATE ('20031017021001', 'YYYYMMDDHHMISS'),
'DDHHMISS'))-1000000
FROM DUAL;

但是超过一个月的话就比较麻烦了,因为每个月的日期数不等
KingSunSha 2003-10-24
  • 打赏
  • 举报
回复
楼上mosaic(影子)老兄已经回复了相同的内容,刚才没看到。不好意思。
KingSunSha 2003-10-24
  • 打赏
  • 举报
回复
如果只要时分秒,那倒是很简单,把结果和一个0点0分0秒的日期相加就可以了:
SELECT TO_CHAR(TO_DATE ('20000101000000', 'YYYYMMDDHHMISS')
+ TO_DATE ('20031017021104', 'YYYYMMDDHHMISS')
- TO_DATE ('20031017021001', 'YYYYMMDDHHMISS'),
'HHMISS')
FROM DUAL;
beckhambobo 2003-10-23
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION sec_div(sec NUMBER)
RETURN VARCHAR2
IS
i NUMBER(20,14);
h INTEGER;
m INTEGER;
s INTEGER;
result VARCHAR2(20) ;
BEGIN
i:=sec/3600;
IF trunc(i)>0 THEN
h:=trunc(i);
i:=i-trunc(i);
ELSE
h:=0;
END IF;
IF i*60>0 THEN
m:=trunc(i*60);
i:=i*60-trunc(i*60);
ELSE
m:=0;
END IF;
IF i*60>0 THEN
s:=round(i*60);
ELSE
s:=0;
END IF;
result:=to_char(h)||'时'||to_char(m)||'分'||to_char(s)||'秒';
RETURN(Result);
END sec_div;


http://expert.csdn.net/Expert/topic/1843/1843455.xml?temp=.1831171
shine333 2003-10-23
  • 打赏
  • 举报
回复
to smallcrocodile:
你说ORACLE里有这样的函数,能计算相隔时间,结果以YY:MM:DD:HH:MM::SS的格式显示吗?
能帮我找一下是哪个函数吗?谢谢!!
smallcrocodile 2003-10-22
  • 打赏
  • 举报
回复
好象ORACLE里有这样得函数
mosaic 2003-10-17
  • 打赏
  • 举报
回复
你那两个时间相减的结果是以天为单位,如果你乘以24*3600,那就以秒为单位了,可以自己换算成其它的时间.
shine333 2003-10-17
  • 打赏
  • 举报
回复
TO LGQDUCKY:
具体到秒。谢谢!!
LGQDUCKY 2003-10-17
  • 打赏
  • 举报
回复
你要返回的是月还是天?
mosaic 2003-10-17
  • 打赏
  • 举报
回复
不好意思,多了个 -1,好在也没什么影响
mosaic 2003-10-17
  • 打赏
  • 举报
回复
oracle应该没有满足这种需求的函数,只好自己算吧. 如果不足1天的话可以用类似
select substr(to_char(to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')+(to_date('20031017021104','YYYYMMDDHHMISS')-to_date('20031017021001','YYYYMMDDHHMISS') )-1,'yyyy-mm-dd hh24:mi:ss'),12,10) from dual
的语句来凑合,超过24小时得另算.
不知道哪位有高招?
shine333 2003-10-17
  • 打赏
  • 举报
回复
TO mosaic:
谢谢!!那这样是可以查看多少秒或多少分或以上,但我如果希望满一分就以几粉几秒来记怎么办?例如12:20:20-12:20:05结果显示00:00:15;又12:30:10-11:20:02结果显示01:10:08,这样行吗??谢谢!!!!

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧