[英]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 ZONE
和SYSTIMESTAMP
,让你在数据库中的时间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.