将varchar字段中的Oracle时间增加一定量?

时间:2011-03-31 14:19:28

标签: sql oracle time plsql

我们有时间存储在Oracle varchar(5)字段中。

使用HH24存储的时间:MI(即:22:30,10:15)。

我们如何运行一个查询,将这些时间增加或减少一定数量?即:增加一小时或减少45分钟。

2 个答案:

答案 0 :(得分: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 :(得分:1)

从/到日期和字符转换的函数是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即将开始的情况下运行,这将按预期工作)但我还在学习:)