如何解决以HH:MM:SS格式的输出计算不同行中相同字段的ORACLE中的TIME差异
我想计算时间“第二行日期/时间(F3)”-“第一行日期/时间(F2)”,以获取ORACLE sql中的时差。 我尝试用LAG函数中的(extract,to_char)apply减去日期,但是我无法获得我想要的输出结果,如下所示。感谢有人可以在这个问题上为我提供帮助。谢谢。
[我希望获得的输出] [2]
SELECT stg_rmstmp_cj.ota_activity.ID,stg_rmstmp_cj.ota_activity.LOT,stg_rmstmp_cj.ota_activity.TYPE,stg_rmstmp_cj.ota_activity.KEY,stg_rmstmp_cj.ota_activity.VALUE,A.DATE,LAG(stg_rmstmp_cj.ota_activity.DATE) OVER (ORDER BY stg_rmstmp_cj.ota_activity.DATE) -stg_rmstmp_cj.ota_activity.DATE AS Different_time
FROM stg_rmstmp_cj.ota_activity where A.ID='93K-100';
这是我最近遇到的带有添加分区的新错误,如下所示,但似乎确实解决了附带屏幕截图示例的问题:
select EQP_ID,LOT_ID,ACTIVITY,ID,TO_CHAR(MODIFIED_DATE,'yyyy-mm-dd hh24:mi:ss') dt,TO_CHAR (DATE '1900-01-01' + ABS ( LAG(MODIFIED_DATE,1)OVER(ORDER BY MODIFIED_DATE) - MODIFIED_DATE),'HH24:MI:SS')AS diff_withoutpartition,1)OVER(PARTITION BY EQP_ID ORDER BY MODIFIED_DATE) - MODIFIED_DATE),'HH24:MI:SS')AS diff_withpartition
from STG_RMSTMP_CJ.ota_activity where EQP_ID = '93K-P007'
解决方法
Date-Date返回数字,其中1等于1天,因此您可以轻松计算小时,分钟和秒数:
Trunc(delta*24) = hours
Mod(trunc(delta*24*60),60) = minutes
Mod(trunc(delta*24*60*60),60) = seconds
还有另一种简单的方法:将delta添加到任何常量Date并使用简单的to_char。例如:to_char(date'2020-01-01' + delta,'hh24:mi:ss')
但是,如果delta> 1天,则需要将天数* 24加上小时,或者使用dec的31st作为常量Date,并将'dd'添加到格式掩码中
请尝试以下。这里的'1900-01-01'
是虚拟的,TO_CHAR
才能正常工作。
WITH MAIN
AS (SELECT TO_DATE ('20200515 19:11:54','yyyymmdd hh24:mi:ss') DAT1,TO_DATE ('20200515 18:11:54','yyyymmdd hh24:mi:ss') DAT2
FROM DUAL)
SELECT DAT1,DAT2,TO_CHAR (DATE '1900-01-01' + ABS (DAT1 - DAT2),'HH24:MI:SS')
FROM MAIN
与使用LAG
的功能相同。
WITH MAIN
AS (SELECT TO_DATE ('20200515 19:11:54','yyyymmdd hh24:mi:ss') DAT2
FROM DUAL
UNION ALL
SELECT TO_DATE ('20200514 19:12:54',TO_DATE ('20200514 16:12:54','yyyymmdd hh24:mi:ss') DAT2
FROM DUAL
)
SELECT DAT1,LAG(DAT1,1)OVER(ORDER BY DAT1) LAG,TO_CHAR (DATE '1900-01-01' + ABS ( LAG(DAT1,1)OVER(ORDER BY DAT1) - DAT1),'HH24:MI:SS')
FROM MAIN
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。