2014-02-21 10 views
3

Я пытаюсь вычесть несколько дней из 'current_timestamp' и преобразовать это в timestamp с помощью функции to_timestamp() в Oracle. Но я всегда получаю начало дневного времени, то есть 12 часов.Получить точное значение временной метки?

Когда я исполняю

select to_timestamp(current_timestamp - 3) from dual; 

Это даст мне результат, как,

18-февралем-14 12.00.00.000000000 AM

Но мне нужно точное удержание 3-х дней с текущего времени.

Спасибо !!!!

ответ

2

даст вам время, а также:

select sysdate - 3 from dual; 

Редактировать основанный на ваш комментарий:

select to_timestamp(to_char(sysdate-3,'DD-Mon-RR HH24:MI:SS'),'DD-Mon-RR HH24:MI:SS') from dual; 

или более просто:

select systimestamp - 3 from dual 
+0

мне нужно метку времени и, поэтому, когда я использую to_timestamp() функцию он дал мне тот же результат :( – user2902067

+0

@ user2902067 см. править –

+0

С to_char (0 это сработало .. Спасибо !! Еще одно сомнение: когда я попробовал вариант «3/24» (3 часа) вместо «3» (3 дня). Затем он принимает некоторые другие тайминги и вычитает 3 часа .. Любая идея? – user2902067

2

Важным отличием является то, что SYSDATE дает вам время сервера, а CURRENT_TIMESTAMP дает вам время сеанса.

Также, согласно документации, TO_TIMESTAMP работает с типами данных CHAR, VARCHAR2, NCHAR или NVARCHAR2, а не DATE. Так что я думаю, что нужно искать в другом месте:

SELECT CAST (SYSDATE AS TIMESTAMP) from dual; 
3
select current_timestamp - 3 ts from dual; 

или

SELECT SYSTIMESTAMP - INTERVAL '3' DAY AS day FROM dual; 
+0

Первая полоса времени, но вторая работает. – Incognito

+0

Нет, нет. http://sqlfiddle.com/#!4/d41d8/25692 – Noel

Смежные вопросы