Oracle数据库中对时间进行减、加操作,计算累计时间

数据表 GYH,字段 YHM 用户名,RQ登录日期(DATE型),LOGIN登录时间(VARCHAR型),OUT退出时间(VARCHAR型)。
问题:用select 语句 选择出 用户名(as 用户名) 和 对应的在线总时间
(在线总时间 ==SUM(OUT - LOGIN),其中 登录时间(LOGIN) 和 退出时间(OUT)是字符型数据,不能直接用时间减函数DATEDIFF。)

希望热心的百度知友能帮忙给出完整 select 语句,谢谢!
不考虑 在线时间段 跨越0点

第1个回答  推荐于2021-01-20
select yhm,sum(to_date(out,'yyyy-MM-dd HH24:mi:ss') -to_date(login,'yyyy-MM-dd HH24:mi:ss')) from gyh
group by yhm;
---计算出在线天数。如果login和out仅仅记录时间,不含日期,则自己做个转化即可。
---关于要显示为:日/时/分,为了简单,将sum(....)设定为A,则表达式如下
select yhm,round(A)||'日'||(round(A*24)-round(A)*24)||'时'||round(A*24*60-round(A*24*60)-round(A*24)*60)||'分' from gyh group by yhm;追问

round(A)||'日'||(round(A*24-round(A)*24))||'时'||round(A*24*60-round(A)*24*60-round(A*24-round(A)*24)*60)||'分'
这样出结果了,问题解决,谢谢

追答

别客气,昨天没有测试环境,因此担心有问题。问题解决了就好。

本回答被提问者采纳
第2个回答  2013-09-23
你能确定login和out是同一天的时间吗,如果是同一天:
select yhm “用户名”,sum(to_date(out,'hh24:mi:ss')-to_date(login,'hh24:mi:ss')) from gyh group by yhm
说明一下,计算结果是天,换算成秒需要*24*60*60

Oracle数据库中对时间进行减、加操作,计算累计时间
---计算出在线天数。如果login和out仅仅记录时间,不含日期,则自己做个转化即可。---关于要显示为:日\/时\/分,为了简单,将sum(...)设定为A,则表达式如下 select yhm,round(A)||'日'||(round(A*24)-round(A)*24)||'时'||round(A*24*60-round(A*24*60)-round(A*24)*60)||'分...

Oracle数据库中对时间进行减、加操作,计算累计时间
---计算出在线天数。如果login和out仅仅记录时间,不含日期,则自己做个转化即可。---关于要显示为:日\/时\/分,为了简单,将sum(...)设定为A,则表达式如下 select yhm,round(A)||'日'||(round(A*24)-round(A)*24)||'时'||round(A*24*60-round(A*24*60)-round(A*24)*60)||'分...

oracle 时间加减
1、测试数据库Oracle10G。2、工具PLSQL Developer。3、测试语句。select to_date('2010\/10\/10 10:10:10', 'YYYY\/MM\/DD HH24:MI:SS') - to_date('2010\/09\/10 10:10:10', 'YYYY\/MM\/DD HH24:MI:SS') from dual 返回结果30

Oracle SQL 求算时间加减问题
select closetime,begintime,maxmoney from tbl_table where closetime>=clostime-15 and closetime<=closetime+15

oracle怎么将当前时间减一年?
1、首先,打开sql,连接到oracle数据库,使用sql语句创建测试表,如下图所示,然后进入下一步。2、其次,使用sql语句将3行测试数据插入上一步创建的测试表中。使用当前系统时间插入日期字段,如下图所示,然后进入下一步。3、接着,完成上述步骤后,单击左上角箭头所指“提交”按钮以将更改提交到数据库...

oracleinterval函数
Oracle数据库的INTERVAL函数主要用于日期和时间的运算。它允许用户对日期或时间进行加减操作,以处理时间间隔的计算。例如,你可以使用INTERVAL函数来计算两个日期之间的差异,或者将一个时间间隔添加到某个日期或时间中。2. 基本语法:INTERVAL函数的基本语法形式如下:对于日期:`INTERVAL 'value' DAY TO ...

查询Oracle 数据库数据 sql 语句 , , 时间相减 , ,
可以通过to_date方式统一时间样式,之后通过做差的形式来进行值获取时间差,。sql:SELECT to_date(to_char(sysdate,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')- to_date(to_char(sysdate,'yyyy-mm-dd')||' 22:22:22','yyyy-mm-dd hh24:mi:ss') FROM DUAL;备注:...

请问,oracle里面的timestamp类型如何对它的年份进行加减?
下面的例子表示3天12个小时30分钟6.7秒:INTERVAL '3 12:30:06.7' DAY TO SECOND(1)时间间隔可以为正,也可以为负。它们可以从各种TIMESTAMP数据类型中加上或者减去,从而得到一个新的TIMESTAMP数据类型。它们之间也可以做加减运算得到新的时间间隔。列表A说明了怎样创建一个表格来记录一个事件的...

oracle数据库如何实现一个表内两个日期的相加。具体问题见补充。急...
select ( select 合同到期日 from 合同表 where id =4028806735f2eeb701360abe53cb65cc ) 日期1, ( select 本期合同年限 from 合同表 where id =4028806735f2eeb701360abe53cb65cc ) 日期2 from dual;将两个日期查出来之后,至于要加要减,要杀要剐楼主自便!!!

oracle中DateDi
在Oracle数据库中,当缺少datediff()函数时,可以采用一些替代方法计算日期间的差异。首先,通过日期间的加减运算来换算天数,如计算天数、小时数、分钟数、秒数和毫秒数。例如,可以使用ROUND函数和TO_NUMBER函数来实现:1. 天数:ROUND(TIMESTAMPDIFF('day', START_DATE, END_DATE))2. 小时:ROUND(...

相似回答