2015-01-26 3 views
0

У меня есть запрос в Mysql, который возвращает минуты, используя TIMESTAMPDIFF в таблице. Но теперь я перенесла свои данные в Oracle. Поэтому я хочу использовать тот же запрос, чтобы получить TIMESTAMPDIFF в таблице в Oracle. Oracle также не поддерживает функцию NOW() в mysql. Столбец PROCESS_START_DATE в запросе содержит данные, которые содержат дату и время. Я пробовал функцию EXTRACT в oraclebut, не работал. Вот мой запрос:Как написать функцию mysql TIMESTAMPDIFF в запросе SQL sql

select * from(
    select trunc(abs(to_date('27/01/2015 08:00:00','dd/mm/yyyy hh:mi:ss') - PMS.PROCESS_START_DATE)*24*60),PM.NAME,PM.ENABLED 
    from PROCESS_MONITOR_STATISTIC PMS 
    JOIN PROCESS_MONITOR PM ON PM.ID=PMS.PROCESS_MONITOR_ID 
    WHERE PM.ENABLED=1 AND PM.NAME= 'WORKFLOWENGINE1' 
    order by PMS.PROCESS_START_DATE desc 
) 
where ROWNUM = 1 
+0

Является ли ваша колонка DATE (которая включает время) или TIMESTAMP (что более точно)? Это повлияет на то, используете ли вы 'sysdate' или' systimestamp' вместо 'now()' и как разность преобразуется в одно значение, представляющее разницу в (целых?) Минутах. –

+0

Его столбец данных типа datetime и содержит значение как 2014-12-30 14:44:24. И если вы можете проверить запрос, я установил предел строки в 1. Поэтому он рассчитает разницу минут только для этой строки. –

+0

Просто измените 'to_date ('27/01/2015 08:00:00 ',' dd/mm/yyyy hh: mi: ss ')' by 'sysdate' – Aramillo

ответ

1

Вы можете сделать что-то вроде этого:

--in case you are working with dates 
select trunc(abs(to_date('26/01/2015 08:00:00','dd/mm/yyyy hh:mi:ss') - sysdate)*24*60) from dual; 

Это представляет разницу в минутах между датой и сейчас (Sysdate) с датами.

Это означает разницу в минутах между датой и теперь (systimestamp) с меткой времени.

Edit:

Этот запрос вычислить минут в год:

select 365*24*60 from dual -- this returns 525600 

Это ваш запрос. Я изменяю время. Убедитесь, что разница между этими датами составляет один год и пять минут

select trunc(abs((to_date('26/01/14 09:00:00','dd/mm/yy hh24:mi:ss')- 
to_date('26/01/2015 09:05:01','dd/mm/yyyy hh24:mi:ss'))*24*60)) from dual; 

Таким образом, при запуске этого результата запроса 525605, через пять минут больше, чем через год. Так что, похоже, он работает.

+0

Благодарим вас за ответ. В вышеприведенном запросе я хочу рассчитать разницу в минутах для столбца 2 datetime. Тогда я думаю, что буду использовать временную шкалу правильно? –

+0

, который зависит от типа данных вашего столбца, если 'date' вы используете случай 1, если используется временный штамп 2. Если вы хотите получить разницу между двумя столбцами, вам нужно только заменить sysdate или systimstamp на ваш столбец. – Aramillo

+0

ahh ok теперь я понял. Спасибо за ваш ответ. –

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