在oracle查询中将分钟转换为hh / mi / ss格式

时间:2015-07-05 13:28:21

标签: oracle

我想知道在Oracle中将分钟转换为hh / mi / ss格式的查询。我已经在很多论坛上看到过很多相同的问题,但没有什么能帮助我得到确切的结果。< / p>

我使用的查询 - 从双重选择to_char(to_date(mod(100,60),&#39; mi&#39;),&#39; hh / mi / ss&#39;); 但我不知道如何获得小时值。因为mod函数只返回余数,我不知道如何取出商部分并替换为小时字段。

1 个答案:

答案 0 :(得分:0)

我想有两种存储方式&#34;分钟&#34;在Oracle数据库中 - 您可以将它们存储在数据类型为INTERVAL DAY TO SECOND的字段中,也可以将它们存储在NUMBER中。最简单的处理方法是INTERVAL - 在这种情况下,TO_CHAR函数会将值转换为SDD HH:MM:SS.FFFFFF形式的字符串,其中&#39; S&#39;是标志(&#39; +&#39;或&#39; - &#39;因为间隔可以是正数或负数),DD =天,HH =小时,&#39 ; MM&#39; =分钟,&#39; SS&#39; =秒,&#39; FFFFFF&#39; =分数;因此,要获得HH:MI:SS我们需要做的就是使用SUBSTR函数,如

SUBSTR(TO_CHAR(I_VAL), 5, 8)

其中I_VALINTERVAL DAY TO SECOND值。

如果要转换的值在数字字段中,由于我们必须计算单个字段值,然后将前一个字段减去作为获取下一个字段的一部分,它会变得有点混乱。但是,由于存储的值是几分钟而不是几秒,因此并不是特别困难:

create table TST (N_VAL  NUMBER,
                  I_VAL  INTERVAL DAY TO SECOND);

INSERT INTO TST(N_VAL, I_VAL) VALUES (666, INTERVAL '666' MINUTE);

SELECT N_VAL, 
       TRUNC(N_VAL/60) AS HOURS,
       N_VAL-(TRUNC(N_VAL/60) * 60) AS MINUTES,
       0 AS SECONDS,
       TO_CHAR(I_VAL),
       SUBSTR(TO_CHAR(I_VAL), 5, 8) AS HMS_FROM_INTERVAL
  FROM TST;

SQLFiddle here

祝你好运。