SQL从日期减去小时,分钟,秒

时间:2015-03-24 17:50:01

标签: sql oracle

DB:oracle

是否有方法或功能可以扣除以下两个样本数据并获得格式化的历史日期时间(yyyymmdd hr24:mi:ss)?

1. Date: 20150324 13:05:22  (Date time)
2. Time: 125:36.25  (hr:mi.ss)

Sample expected result 

20150319 06:30:10  

2 个答案:

答案 0 :(得分:1)

根据您的相同数据,您的样本预期结果不正确。它应该是2015-03-19 07:28:57。像下面这样的东西可能适合你:

WITH d1 AS (
    SELECT timestamp'2015-03-24 13:05:22' AS mydate
         , '125:36.25' AS mytime FROM dual
)
SELECT mydate - NUMTODSINTERVAL( TO_NUMBER(SUBSTR(mytime, 1, INSTR(mytime, ':') - 1))*3600
                               + TO_NUMBER(SUBSTR(mytime, INSTR(mytime, ':') + 1, 2))*60
                               + TO_NUMBER(SUBSTR(mytime, INSTR(mytime, '.') + 1, 2)), 'SECOND')
  FROM d1;

我在上面的查询中正在做的是转换"时间"元素为秒,然后为INTERVAL值,以从日期/时间值中减去。

另外,如果时间列是INTERVAL DAY TO SECOND而不是VARCHAR2,那会更好。然后它可以直接用于日期/时间戳算法,而无需跳过任何环节。

答案 1 :(得分:0)

我建议将第二天转换为小数天,然后从第一天减去:

select (datecol - 
        (to_number(substr(hhmmss, -2)) / (60*24*24) +
         to_number(substr(hhmmss, -5, 2))/(60*24) +
         to_number(substr(hhmmss, instr(hhmmss, ':') - 1)/24
        )
       )