当日期计算发生时,Oracle sql:ORA-01830

时间:2015-03-12 13:23:54

标签: sql oracle compiler-errors

我想执行以下oracle SQL查询

SELECT t1.Technology, count(t1.trax_id) as "Current number of items", to_char(to_date(max(round((SYSDATE - t1.time_event) * 24 * 60 * 60)),'sssss'),'hh24:mi:ss') as "max_ages"
from dm_procmon t1
group by t1.Technology;

问题是日期变电站公式。

  

我互相约会2个约会。这给了我一个十进制值   (如0,00855605)。我希望值返回为日期值。所以我   首先将其转换为数字(十进制>数字)而不是a   char(Number> Char)最后从char到date(Char> Date)。

但是当我执行我收到的动作时 错误报告 -

  

SQL错误:ORA-01830:Datumnotatieafbeelding eindigt voordat de gehele   invoerstring是geconverteerd。   01830. 00000 - “日期格式图片在转换整个输入字符串之前结束”

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您尝试转换为to_date(%of seconds%,' sssss'),这就是问题所在。只需使用TO_CHAR(MAX(TO_DATE('20000101','yyyymmdd')+(SYSDATE - t1.time_event)),'hh24:mi:ss');这将适用于间隔< 1天

答案 1 :(得分:0)

这是一个通用解决方案,对最大间隔大小没有任何限制:

select Technology, cnt as "Current number of items", FLOOR(x) || ':' || TO_CHAR(TO_DATE('20000101','yyyymmdd')+(x - FLOOR(x)),'hh24:mi:ss') as "max_ages"
from
    (select t1.Technology, COUNT(t1.trax_id) cnt, MAX(SYSDATE - t1.time_event) x
    from dm_procmon t1
    group by t1.Technology);

FLOOR(x)返回日期,其余的(x - FLOOR(x))会添加到一个固定日期并转换为小时,分钟和秒

答案 2 :(得分:0)

以下内容将为约68年内的所有日期提供DAY TO SECOND INTERVAL

SELECT t1.technology, COUNT(t1.trax_id) AS "Current number of items"
     , NUMTODSINTERVAL(ROUND((SYSDATE - MIN(t1.time_event) * 24 * 60 * 60), 'SECOND') AS "max_ages"
  FROM dm_procmon t1
 GROUP BY t1.technology;

请注意,使用MAX(SYSDATE - time)而不是使用SYSDATE-MIN(time)(逻辑上相同)。使用此代替TO_CHAR()的优点是您可以使用DATE / INTERVAL算术中返回的值。