此问题已在此处有答案:
find the elapsed time between two dates in oracle sql(3个答案)
2天前关闭。
如何从SQL ORACLE中创建的任务日期中减去系统日期,以获得天、小时、分钟的差值?
我尝试了这个代码,但我得到了错误的值:TO_CHAR(TO_DATE('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss') + (sysdate - a.CREATE_DATE_PL ), 'dd:hh24:mi:ss') AS TT_LIFETIME
我的结果如下(报告已生成02.06 14:05
enter image description here
2条答案
按热度按时间sr4lhrrt1#
两个
DATE
数据类型值之差是它们之间的 * 天 * 数,所以你必须做一些算术来提取天/小时/分钟,或者-另一种选择-尝试extract
与numtodsinterval
。例如:
当我运行代码时,是2023年6月2日14:29。要减去的日期是2023年6月1日(昨天)08:10。
diff
表示这两个值之间的天数c1
是numtodsinterval
返回的值cd
、ch
和cm
包含提取的天数/小时数/分钟数,即相差1天6小时19分钟nvbavucw2#
日期和日期之间的差异是一个(分数)数字,表示它们之间的天数。然后,您可以将其乘以24以获得小时,或1440以获得分钟,或86400以获得秒。在此过程中不要使用TO_CHAR转换任何内容:
然后,您可以将一个(分数)数字添加到一个日期,结果是另一个日期,原始日期偏移了您添加的天数。
您也可以将
DATE
s转换为TIMESTAMP
s,然后差异将是INTERVAL
数据类型:结果:
有许多函数可用于提取音程的片段。然而,我发现在大多数情况下,处理日期是最简单的,因为将
INTERVAL
转换为单个数字(例如,秒的总数)并不像应该的那样简单,而DATE
算法非常简单。DATE
也更简单,因为它们不包括时区,这可能会让使用TIMESTAMP
逻辑的程序员感到非常困惑。