2017-02-23 44 views

ответ

1

Вы просто хотите минуты и секунды усечены? Как насчет вычитания минуты и секунды с момента, как так:

SELECT ADD_SECONDS(CURRENT_TIMESTAMP, 
    - MINUTE(CURRENT_TIMESTAMP) * 60 
    - SECOND(CURRENT_TIMESTAMP)) FROM DUMMY 

Если вы действительно хотите раунде так, что 30 или более минут округляется до следующего часа вы должны работать с футляром либо вычитать минуты/секунды или добавьте оставшиеся минуты до следующего часа:

SELECT ADD_SECONDS(CURRENT_TIMESTAMP, 
    CASE WHEN MINUTE(CURRENT_TIMESTAMP) < 30 
    THEN -MINUTE(CURRENT_TIMESTAMP) * 60 - SECOND(CURRENT_TIMESTAMP) 
    ELSE (60-MINUTE(CURRENT_TIMESTAMP)) * 60 - SECOND(CURRENT_TIMESTAMP) 
    END 
) FROM DUMMY 

Заменить CURRENT_TIMESTAMP с отметкой времени колонки по мере необходимости.

+0

Работает как шарм –

0

Пожалуйста, проверьте следующее SQLScript

do begin 

declare lv_ts TIMESTAMP := CURRENT_TIMESTAMP; 

select 
    case when minute(:lv_ts) >=30 
    then 
     ADD_SECONDS(
      :lv_ts, 
      (60 * 60 - (minute(:lv_ts) * 60 + to_int(second(:lv_ts)))) 
     ) 
    else 
     ADD_SECONDS(
      :lv_ts, 
      -1 * (minute(:lv_ts) * 60 + to_int(second(:lv_ts))) 
     ) 
    end 
from dummy; 

end; 

Я надеюсь, что это помогает,

+1

Две минуты быстрее! :). - Но ваш хранит микросекунды из-за to_int(), который, вероятно, не нужен. Ваш ответ «23.02.2017 15: 00: 00.483' прямо сейчас. – Hannobo

+0

Так это быстрее. –

0

Использование series_round(). Это самый быстрый способ округления штампов времени, особенно если вы используете его в группе.

select series_round('2016-09-03 10:27:09', 'interval 1 hour') from dummy 

Отъезд в documentation дополнительных опций округления.

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