2011-03-31 25 views
1

我們有時間存儲在Oracle varchar(5)字段中。在varchar字段中增加Oracle時間一定量?

使用HH24:MI(即:22:30,10:15)存儲的時間。

我們該如何運行一個查詢,將這些時間增加或減少一定量?即:增加一小時或減少45分鐘。

+3

什麼是'23:45 + 45'應該是? '24:30'還是'00:30'? – 2011-03-31 14:23:11

+0

我想這種情況不會存在。但如果它 - 00:30 – 2011-03-31 14:26:02

回答

6

你可以使用內置的日期(和interval - 感謝Alex的鏈接)計算:

to_char(to_date(:x, 'hh24:mi') + INTERVAL :y MINUTE,'hh24:mi') 

例如:

SQL> WITH my_data AS (
    2  SELECT '12:15' t FROM dual 
    3  UNION ALL SELECT '10:30' FROM dual 
    4 ) 
    5 SELECT t, 
    6   to_char(to_date(t, 'hh24:mi') + INTERVAL '15' MINUTE,'hh24:mi')"t+15" 
    7 FROM my_data; 

T  t+15 
----- ----- 
12:15 12:30 
10:30 10:45 
+1

輝煌!看起來關鍵字'HOUR'除了'MINUTE'外還有效# – 2011-03-31 14:33:13

+2

@Marcus間隔更多[here](http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements003.htm #i38598)。 – 2011-03-31 14:42:26

1

的功能自/至日期轉換和char是TO_DATE()TO_CHAR()

SELECT 
    TO_DATE('31/12/2001 23:55:00', 'DD/MM/YYYY HH24:MI:SS') AS "DATE", 
    TO_CHAR(CURRENT_TIMESTAMP, 'DD/MM/YYYY HH24:MI:SS') AS "CHAR" 
FROM DUAL 

所以,你可以這樣做:

SELECT 
    TO_DATE('23:45', 'HH24:MI'), 
    TO_DATE('23:45', 'HH24:MI') + INTERVAL '45' MINUTE, 
    TO_CHAR(TO_DATE('23:45', 'HH24:MI') + interval '45' MINUTE, 'HH24:MI') 
FROM DUAL 

有可能是其他更好的方法來做到這一點(我不知道這會按預期如果在DST約RAN開始),但我還在學習:)