Объединение 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 ответа
Решение
В одну сторону
- Преобразовать SYSDATE в строку
- Добавить свой фиксированный элемент времени
- Преобразовать обратно в дату
Поместите это так:
to_date(to_char(sysdate,'YYYY-MM-DD')||' 02:50:00','YYYY-MM-DD HH24:MI:SS' )
Альтернативный способ: использовать арифметику.
- Уберите реальное время из SYSDATE
- Добавьте количество секунд
((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
в следствии.