Увеличить время Oracle в поле varchar на определенную величину? - PullRequest
1 голос
/ 31 марта 2011

Время хранится в поле Oracle varchar (5).

Время хранится в формате HH24: MI (т.е. 22:30, 10:15).

Как мы можем выполнить запрос, который увеличит или уменьшит это время на определенную величину?То есть: увеличение на один час или уменьшение на 45 минут.

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

вы можете использовать встроенную дату (и интервал - спасибо 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 голос
/ 31 марта 2011

Функции для преобразования из / в дату и символ: 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 вот-вот запустится), но я все еще учусь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...