首页 > 解决方案 > Oracle SQL To_Char(interval) 没有使用我的格式字符串?

问题描述

在下面的 SQL 中,我想以 HH:MM:SS 格式打印一个间隔(实际上是几秒)。我将秒数转换为间隔,然后尝试使用 TO_CHAR 日期格式。Oracle 服务器忽略了我的模式并打印了一个完整的时间戳,日期和微秒中的字符为零。我究竟做错了什么?

CASE WHEN (TR.RUN_LENGTH > 0) THEN TO_CHAR(NUMTODSINTERVAL(TR.RUN_LENGTH,'second'), 'HH24:MI:SS')
ELSE '0' END AS RUN_LENGTH,

我得到:+000000000 00:03:22.000000000

标签: sqloracle

解决方案


正如您所观察到的,to_char()它不适用于间隔。所以,不要考虑间隔。相反,您有几秒钟的时间,并且想要转换为 HH:MM:SS 格式的字符串。

使用算术和字符串运算:

select lpad(floor(tr.run_length / 3600), 2, '0') || ':' || lpad(mod(floor(tr.run_length / 60),  60), 2, '0') || ':' || lpad(mod(tr.run_length, 60), 2, '0') as hhmmss
from (select 1 as run_length from dual union all
      select 10 as run_length from dual union all
      select 100 as run_length from dual union all
      select 1000 as run_length from dual union all
      select 10000 as run_length from dual union all
      select 100000 as run_length from dual 
     ) tr;

是一个 db<>fiddle。


推荐阅读