如何在Am / Pm格式的相应时间内转换时间间隔字段的select语句的结果。 我的领域是:
Interval Day(2) To Second(6)
我试过了:
select To_Char(Att_EntranceTime , 'HH:MI AM') From EMPLOYEEATTENDENCETABLE;
然而这对我没有帮助,我也尝试将基准时间从systime添加到我的间隔字段,但这没有帮助..有人可以建议我该怎么办?
答案 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暗示 - 并且存储与其日期分开的实际时间是不寻常的 - 那么拥有或允许若干天似乎很奇怪。