繁体   English   中英

如何在oracle中减去2个varchar日期?

[英]How to substract 2 varchar dates in oracle?

我有这些 varchar :20211026231735。

所以我想要一个查询,将实际的 sysdate 减去该日期,并将减法转换为 DAY HOURS AND SECONDS。

select TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') - start_time from TABLEA where job_name='jOB_AA_BB';
I get 4220.

请问有什么帮助吗? 谢谢

当您使用DATE数据类型进行日期时间算术时,您会得到NUMBER天。 要获得INTERVAL您可以减去两个TIMESTAMPs 您没有说明 start_time 的数据类型是什么,但您可能会逃脱:

select localtimestamp - start_time 
from tablea where job_name='jOB_AA_BB';

LOCALTIMESTAMP为您提供当前会话时区的TIMESTAMP值。 还有CURRENT_TIMESTAMP ,它让你在同样的事情TIMESTAMP WITH TIME ZONESYSTIMESTAMP ,让你在数据库中的时间TIMESTAMP WITH TIME ZONE 您可能需要转换start_time以避免时区差异(如果有)。

您可以使用函数numtodsinterval将日期算术的结果转换为间隔。 如有必要,然后使用提取物拉出所需的组件。

with tablea(job_name, start_time) as 
     (select 'jOB_AA_BB','20211026231735' from dual)
select numtodsinterval((SYSDATE - to_date( start_time,'yyyymmddhh24miss')),'hour') date_diff
 from tablea where job_name='jOB_AA_BB' ;

with tablea(job_name, start_time) as 
     (select 'jOB_AA_BB','20211026231735' from dual) 
select extract (hour from date_diff) || ':' || extract (minute from date_diff)
  from ( 
         select numtodsinterval((sysdate - to_date( start_time,'yyyymmddhh24miss')),'day') date_diff
           from tablea where job_name='jOB_AA_BB' 
       );  

注意:除了错误之外,我不确定您是如何得到任何结果的,因为您的查询a string - a string 您不应将 sysdate 转换为字符串,而应将字符串转换为日期(最好将其存储为正确的数据类型 - date )。

您可以将值转换为日期(而不是将SYSDATE转换为字符串),然后减去并显式返回值作为INTERVAL DAY TO SECOND类型:

SELECT (SYSDATE - TO_DATE('20211026231735', 'YYYYMMDDHH24MISS')) DAY TO SECOND
FROM   DUAL;

或者,对于您的桌子:

SELECT (SYSDATE - TO_DATE(start_time,'YYYYMMDDHH24MISS') DAY TO SECOND
FROM   TABLEA
WHERE  job_name='jOB_AA_BB';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM