2012-07-16 16 views
0

我必须创建每分钟时间演示文稿的表格。 将有三个字段小时:Oracle中的分钟演示文稿

TIME_DESC值:00:00,00:01,...,12:32,12:33,...,23:58,23:59(根据小时和分钟) 小时值:00-23(按小时) 分钟值:00-59(根据分钟)

因此,单个记录看起来像||。 01:05 || 01 || 05 ||或|| 22:25 || 22 || 25 ||

如何在单Oracle查询中实现此表创建?

谢谢。

+2

[你尝试过什么?(http://whathaveyoutried.com) – 2012-07-16 14:29:34

+4

随着小时和分钟值衍生自该TIME_DESC值为什么你需要三列? – APC 2012-07-16 14:57:12

回答

2

你可以这样做:

select to_char(hr, '00')||':'||to_char(mi, '00') as time_desc, 
     to_char(hr, '00') as hours, to_char(mi, '00') as minutes 
from (select level-1 from dual connect by level <= 24) as hr cross join 
    (select level-1 from dual connect by level <= 60) as mi 

这里的关键是产生的数字,从0〜23,0〜59,剩下的只是格式化这些你想要的方式。

1

你可以试试:

WITH t AS (
    SELECT to_date('0001-01-01', 'yyyy-mm-dd') + interval '1' MINUTE * (LEVEL-1) datetime 
    FROM dual 
CONNECT BY LEVEL <= 1440 
) 
SELECT to_char(t.datetime, 'hh24:mi') time, 
     to_char(t.datetime, 'hh24') hh, 
     to_char(t.datetime, 'mi') mi 
FROM t 

Here是小提琴

+0

提示:'interval'1'MINUTE *(LEVEL-1)'等于'numtodsinterval(level-1,'minute')' – 2012-07-16 15:22:58

+0

Thanks @RobvanWijk,其实我也可以做'+(level-1)/ 1440' – 2012-07-16 18:03:02

+0

我认为 - 比numtodsinterval更短但不够清晰 – 2012-07-17 06:02:11