我的要求是使用SQL将15分钟的时间间隔转换为HH:MI am / pm格式。举个例子:
IF interval = 0 => time = 12:00 am
IF interval = 15 => time = 12:15 am
IF interval = 30 => time = 12:30 am
IF interval = 45 => time = 12:45 am
IF interval = 60 => time = 01:00 am
依此类推。,
到目前为止,我只设法将每小时的时间间隔转换为HH:MI a / p格式,即12:00a,01:00a等,这是'查询的示例,我&# 39; m使用我的自定义表格。
START_TIME
是包含15分钟间隔条目的列。
select START_TIME/15,
case when (mod(START_TIME/15,4) = 0) then
case when (mod(START_TIME/15, 48) = 0) then (decode(START_TIME/15,0,'12:00 am',48,'12:00 pm'))
else (
case when (START_TIME/15 < 48) then (START_TIME/ 60 || 'am')
else (START_TIME / 60 - 12 || 'pm')
end
)
end
else ' '
end from MY_TABLE;
有人可以帮助我让它在15分钟内完成工作吗?感谢。
答案 0 :(得分:1)
尝试让oracle为您添加时间。
默认情况下,在日期中添加一个会添加一天。您想在start_time列中添加时间。
我们将使用TRUNC开始一个没有时间组件的日期。
SELECT TRUNC(SYSDATE) FROM DUAL;
然后在此日期添加1 /(60 * 24)* START_TIME分钟,并仅打印出日期的时间部分。
select TO_CHAR (TRUNC(SYSDATE) + (1/(60*24) * START_TIME), 'HH:MI AM')
from MY_TABLE
答案 1 :(得分:0)
也许我不明白你的问题。 Oracle间隔类型已经这样做了。
Oracle中间隔的目的是存储时间偏移并允许您执行您似乎要求的操作。可以将间隔添加到基准日期/时间戳以生成新的日期/时间戳,并使用TO_CHAR和TO_DATE以任何格式使用日期/时间格式化函数进行格式化。
create table intervals(base_time timestamp, offset_interval interval);
SQL> desc intervals
Name Null? Type
----------------------------------------- -------- ----------------------------
BASE_TIME TIMESTAMP(6)
OFFSET_INTERVAL INTERVAL DAY(2) TO SECOND(6)
SQL> insert into intervals values(sysdate, interval '15' minute);
1 row created.
SQL> insert into intervals values(sysdate, interval '30' minute);
1 row created.
SQL> insert into intervals values(sysdate, interval '45' minute);
1 row created.
SQL> insert into intervals values(sysdate, interval '60' minute);
1 row created.
SQL> insert into intervals values(sysdate, interval '90' minute);
1 row created.
SQL> insert into intervals values(sysdate, interval '120' minute);
1 row created.
然后将基本时间戳添加到间隔,并使用TO_CHAR()
格式化SQL> select to_char(base_time + offset_interval, 'HH:MI AM') from intervals;
TO_CHAR(
--------
03:45 PM
04:00 PM
04:15 PM
04:30 PM
05:00 PM
05:30 PM
6 rows selected.