暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将JD Edwards表中的6位数字字段格式化为HH24:MI:SS

ASKTOM 2019-05-13
487

问题描述

我在要显示为17:04:43的列中有此值 (170443)。我已经写了这段代码来实现这一点,但看到错误ORA-01850: 小时必须在0到23之间。解决方案是什么?

SELECT CASE WHEN LVUPMT= 0 THEN NULL 
  ELSE
    TO_TIMESTAMP(substr(LVUPMT,1,2) ||':'||substr(LVUPMT,3,2) ||':'||substr(LVUPMT,5,2), HH24:MI:SS')
  END AS DDATE 
FROM PRODDTA.F07620 
WHERE LVAN8 = 102366;

专家解答

我不熟悉JD Edwards。因此无法提供具体帮助。

传递170443和 “它为我工作”:

select CASE WHEN '170443' = 0 THEN NULL 
  ELSE
    TO_TIMESTAMP(substr('170443',1,2) ||':'||substr('170443',3,2) ||':'||substr('170443',5,2), 'HH24:MI:SS')
  END AS DDATE
from dual;

DDATE                            
01-MAY-2019 17.04.43.000000000  


所以想必你正在返回具有不同值的行...

您需要查看substr (llupmt,1,2) 返回什么。

PS-如果您只想显示时间,to_timestamp是错误的功能...这将把值转换为带有今天的日期和提供的时间戳:

select to_timestamp ( '12:34:56', 'HH24:MI:SS' ) , sysdate
from   dual;

TO_TIMESTAMP('12:34:56','HH24:MI:SS')   SYSDATE                
01-MAY-2019 12.34.56.000000000          14-MAY-2019 14:53:11 


如果这只是为了显示,只需格式化数字...


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论