2016-09-06 3 views
0

У меня есть дата со значением - 08.06.16 19: 56: 20,473000000 в orcle db.Oracle timestamp rounding

CR_DATE - TIMESTAMP(6) 

Мне нужна дата, которая будет усечена в верхней части предыдущего часа и преобразована в формат эпохи. Например, если дата указана выше, то она должна округляться до 08.06.16 19:00:00, а затем преобразуется в эпоху, которая должна давать мне окончательный o/p в качестве 1465412400

Я могу использовать следующий запрос для изменения к эпохе, но с этим округлением до ближайшего часа не работает.

ROUND((CAST(CR_DATE AS DATE) - DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 

Если я использую

select CR_DATE,TRUNC(CREATION_DATE, 'HH24') AS creationDate 

тогда я получаю значение, 08.06.16 и HH: MM детали получает усеченный.

NLS_TIMESTAMP_FORMAT установлен в БД DD.MM.RR HH24: MI: SSXFF

Может кто-то помочь мне исправить это без изменения формата НСЛ?

+0

Вы говорите «округленное до ближайшего часа», но ваш пример показывает, что вы хотите усечь верхнюю часть предыдущего часа. Какая из двух правильная. 'trunc (creation_date, 'HH24')' вернет «дату», усеченную до часа. Ваш клиент может не отображать временную часть, но она все еще существует. –

+0

Спасибо, что посмотрели на это. Да, он обрезается до вершины предыдущего часа и фактически до ближайшего часа. Извиниться за ошибку. Но как мне получить значение с течением времени. Я не хочу, чтобы часть времени полностью испускалась. – RandomQuestions

+0

Что означает «и на самом деле до ближайшего часа»? Похоже, мы вернемся к округлению не усечения –

ответ

0

Это звучит, как вы хотите

ROUND((TRUNC(CAST(CR_DATE AS DATE), 'HH24') - 
      DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 

trunc(some_date, 'HH24') возвращает дату округляется до ближайшего часа. Ваш клиент не может отображать компонент времени по умолчанию, но он все еще существует.

with x as (
    select timestamp '2016-06-08 19:56:20.473' cr_date 
    from dual 
) 
select ROUND((TRUNC(CAST(CR_DATE AS DATE), 'HH24') - 
       DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 
    from x; 
+0

Спасибо, тонна ... Это прекрасно работает. – RandomQuestions