2016-07-07 4 views
-2

У меня есть две даты в базе данных в unix time. Я хочу разницу между ними и показать это в часах.Разница между двумя форматами в часах

Например
Дата1: 05/07/2016 14:40:00 PM (1467733205)
Дата2: 05/07/2016 15:40:05 PM (1467729600)

Разница: Дата2 - Date1 = 3605 s

Это результат я хочу, чтобы показать его в часах. ->1 час и 5 секунд

SELECT TO_CHAR(to_date('01/01/1970', 'dd/mm/yyyy') + (((HOUR_DEPARTURE - DATE_LOADING)/ 60/60/24)), 'dd "days and" HH:MI:SS') 
    FROM dual 

Я попытался, как это, но это shous 01 дней и 01:00:05. Разницы нет.

+0

Какой формат вы хотите получить от ответа? Надеюсь, вы хотите 01:00:05, а не то, что вы написали (строка: 1 час и 5 секунд). Кроме того, как вы хотите, чтобы результат показывался, если разница составляет 40 часов? – mathguy

+0

@ AjayPunekar - это не дубликат; связанный с вами вопрос не имеет никакого отношения к форматированию, что является единственной проблемой здесь. – mathguy

+0

Что это имеет отношение к [тегу: C#] и [тег: asp.net]? – Kritner

ответ

0

dd в вашем решении выбирает день месяца с 01.01.1970. Итак, вы уже начинаете с 1 дня. Вы не можете просто вычесть 1, чтобы получить «0 дней», поскольку вычисления выполняются за календарные даты, а не «количество дней».

Если вы хотите, чтобы ответ в дни и чч: ми: сс, то вы можете сделать что-то вроде этого:

with 
    test_data (date1, date2) as (
     select sysdate - 3605/86400, sysdate from dual 
    ) 
select to_char(trunc(date2 - date1)) || ' days and ' || 
      to_char(date '1970-01-01' + (date2 - date1), 'hh24:mi:ss') 
from test_data; 



TO_CHAR(TRUNC(DATE2-DATE1))||'DAYSAND'||TO_CHAR(DATE'1970- 
---------------------------------------------------------- 
0 days and 01:00:05 
0
SELECT DECODE (d, 0, NULL, 1, '1 day ', TO_CHAR (d) || ' days ') 
     || DECODE (h, 0, NULL, 1, '1 hour ', TO_CHAR (h) || ' hours ') 
     || DECODE (m, 0, NULL, 1, '1 minute ', TO_CHAR (m) || ' minutes ') 
     || DECODE (s, 0, NULL, 1, '1 second', TO_CHAR (s) || ' seconds') 
    FROM (SELECT EXTRACT (DAY FROM (dt)) d, EXTRACT (HOUR FROM (dt)) h, EXTRACT (MINUTE FROM (dt)) m, EXTRACT (SECOND FROM (dt)) s 
      FROM (SELECT NUMTODSINTERVAL (:HOUR_DEPARTURE - :DATE_LOADING, 'DAY') AS dt FROM DUAL)) 

Для удовольствия:

SELECT DECODE (y, 0, NULL, 1, '1 year ', TO_CHAR (y) || ' years ') 
     || DECODE (m, 0, NULL, 1, '1 month ', TO_CHAR (m) || ' months ') 
     || DECODE (d, 0, NULL, 1, '1 day ', TO_CHAR (d) || ' days ') 
     || DECODE (h, 0, NULL, 1, '1 hour ', TO_CHAR (h) || ' hours ') 
     || DECODE (mi, 0, NULL, 1, '1 minute ', TO_CHAR (mi) || ' minutes ') 
     || DECODE (s, 0, NULL, 1, '1 second', TO_CHAR (s) || ' seconds') 
    FROM (SELECT EXTRACT (YEAR FROM (ym)) y,EXTRACT (MONTH FROM (ym)) m, 
       EXTRACT (DAY FROM (dt)) d, EXTRACT (HOUR FROM (dt)) h, EXTRACT (MINUTE FROM (dt)) mi, EXTRACT (SECOND FROM (dt)) s 
      FROM (SELECT NUMTOYMINTERVAL (MONTHS_BETWEEN (:HOUR_DEPARTURE, :DATE_LOADING), 'MONTH') AS ym , 
         NUMTODSINTERVAL (ADD_MONTHS(:HOUR_DEPARTURE,-MONTHS_BETWEEN (:HOUR_DEPARTURE, :DATE_LOADING)) - :DATE_LOADING, 'DAY') AS dt 
        FROM DUAL 
       ) 
     ) 
0

Oracle Setup:

CREATE TABLE your_table (date1, date2) AS 
SELECT 1467733205, 1467729600 FROM DUAL; 

Запрос:

SELECT TRUNC(diff) AS days, 
     TRUNC(MOD(diff * 24, 24)) AS hours, 
     TRUNC(MOD(diff * 24*60, 60)) AS minutes, 
     ROUND(MOD(diff * 24*60*60, 60)) AS seconds 
FROM (
    SELECT (DATE '1970-01-01' + date1 /24/60/60) 
     - (DATE '1970-01-01' + date2 /24/60/60) AS diff 
    FROM your_table 
); 

Выход:

DAYS HOURS MINUTES SECONDS 
---- ----- ------- ------- 
    0  1  0  5 

Запрос 2:

SELECT TRIM(
     REGEXP_REPLACE(
      REGEXP_REPLACE(
      ( (DATE '1970-01-01' + date1/24/60/60) 
       - (DATE '1970-01-01' + date2/24/60/60)) DAY TO SECOND, 
      '^\+?(-?)0*(\d+) 0?(\d+):0?(\d+):0?(\d+)\.0+$' 
      '\1\2 days \3 hours \4 minutes \5 seconds' 
      ), 
      '(^|)0 (days|hours|minutes|seconds)' 
     ) 
     ) AS difference 
FROM your_table 

Выход:

DIFFERENCE 
----------------- 
1 hours 5 seconds 
Смежные вопросы