Объединение sysdate с фиксированным временем в oracle

Я хочу объединить sysdate со своим временем Ниже приведен запрос, который я пробовал, но я получаю год как 0016 вместо 2016 года.

Есть ли другие способы получить результат, как показано ниже?

Запрос:

select to_date(sysdate || ' 02:50:00','dd-mon-yyyy hh24:mi:ss') as MyTime from dual

Выход:

МОЕ ВРЕМЯ

3/12/0016 02:50:00

2 ответа

Решение

В одну сторону

  1. Преобразовать SYSDATE в строку
  2. Добавить свой фиксированный элемент времени
  3. Преобразовать обратно в дату

Поместите это так:

to_date(to_char(sysdate,'YYYY-MM-DD')||' 02:50:00','YYYY-MM-DD HH24:MI:SS' ) 

Альтернативный способ: использовать арифметику.

  1. Уберите реальное время из SYSDATE
  2. Добавьте количество секунд ((60*60*2)+(50*60)/(60*60*24)

Включить ваши работы или нет:

trunc(sysdate) + ( 10200 / 86400)

Есть третий способ: использовать ИНТЕРВАЛ (в основном вариант второго способа).

SQL> select trunc(sysdate) + to_dsinterval('0 02:50:00') as mytime
  2  from dual
  3  /

MYTIME
------
2016-03-12 02:50:00

SQL> 

Попробуй это

SELECT TO_DATE(TO_CHAR(SYSDATE, 'DD-MON-YYYY') || ' 08:00:00', 'DD-MON-YYYY HH:MI:SS') FROM DUAL;

Просто поменяй SYSDATE в TO_CHAR(SYSDATE, 'DD-MON-YYYY')

Я сделал это:

SELECT TO_CHAR(
  TO_DATE(TO_CHAR(SYSDATE, 'DD-MON-YYYY') || ' 08:00:00', 'DD-MON-YYYY HH:MI:SS')
,'DD-MON-YYYY HH:MI:SS') from dual;

и получил

12-MAR-2016 08:00:00 

в следствии.

Другие вопросы по тегам