在Oracle中将时间间隔转换为AM PM中的实际时间

时间:2015-08-18 07:38:01

标签: oracle time converter

如何在Am / Pm格式的相应时间内转换时间间隔字段的select语句的结果。 我的领域是:

Interval Day(2) To Second(6)

我试过了:

select To_Char(Att_EntranceTime , 'HH:MI AM') From EMPLOYEEATTENDENCETABLE;

然而这对我没有帮助,我也尝试将基准时间从systime添加到我的间隔字段,但这没有帮助..有人可以建议我该怎么办?

1 个答案:

答案 0 :(得分:1)

间隔不能直接格式化,正如您所发现的那样。您可以将时间间隔添加到时间设置为午夜的任何日期,然后格式化结果日期以按所需格式显示时间。例如,您可以使用trunc(sysdate)将其添加到今天的日期:

to_char(trunc(sysdate) + my_interval, 'HH:MI AM') 

您需要截断它以将时间设置为午夜;否则结果将是你的间隔加上当前的系统时间。

或者您可以使用任何固定日期;这是一个虚拟数据设置的例子:

create table my_table (my_interval interval day(2) to second(6));
insert into my_table (my_interval) values (interval '0 12:34:56.78' day to second);
insert into my_table (my_interval) values (interval '99 01:02:03.456' day to second);

select my_interval, to_char(date '1970-01-01' + my_interval, 'HH:MI AM') as formatted
from my_table;

MY_INTERVAL          FORMATTED
-------------------- ---------
+00 12:34:56.780000  12:34 PM
+99 01:02:03.456000  01:02 AM

第二个值显示潜在问题。您的间隔定义为允许两位数的日期数,这意味着间隔可以跨越任何少于100天的时间。如果您只提取时间部分,则会丢失有关天数的信息。这可能是你想要发生的事情。如果该间隔应该代表一个时间,它想要显示AM / PM暗示 - 并且存储与其日期分开的实际时间是不寻常的 - 那么拥有或允许若干天似乎很奇怪。