我想执行以下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 - “日期格式图片在转换整个输入字符串之前结束”
我做错了什么?
答案 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
算术中返回的值。