转换Oracle日期时间超过24小时

时间:2018-08-03 03:31:49

标签: oracle plsql oracle-sqldeveloper

我有V_Date(YYYYMMDD)和V_Time(HHMISS)字段。

问题是格式时间不是在HH24中,而是30小时。

数据为: 20180307 313025

基于上述数据,我想正常转换为 20180308 073025 因此,我可以像下面的sql那样转换为时间戳:

SELECT TO_DATE('20180308073025', 'YYYYMMDDHH24MISS') FROM DUAL

2 个答案:

答案 0 :(得分:1)

您可以将时间值添加到日期值。但是在您必须将时间值转换为秒数之前。在Oracle中,一天的值为1。半天(12小时)为0.5,一秒为1 /(24 * 60 * 60)。

这是一个例子:

WITH DS AS (
    SELECT 313025 AS V_TIME,
           20180307 AS V_DATE
      FROM DUAL
)
SELECT (TO_NUMBER(SUBSTR(V_TIME, 1, 2)) * 3600 
       + TO_NUMBER(SUBSTR(V_TIME, 3, 2)) * 60 
       + to_number(substr(v_time, 5, 2))) / (24 * 60 * 60)
       + TO_DATE(TO_CHAR(V_DATE), 'YYYYMMDD') AS YOUR_DATE
  FROM DS
;

希望有帮助。

答案 1 :(得分:0)

要将时间转换为秒,例如“ 140:05:10”,可以使用以下代码:

SELECT (REGEXP_SUBSTR('140:05:10','[^:]+',1,1)*3600 ) +
(REGEXP_SUBSTR('140:05:10','[^:]+',1,2) * 60) + 
(REGEXP_SUBSTR('140:05:10','[^:]+',1,3)) sec from DUAL;

output = 504310