2012-07-16 56 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