2013-02-14 4 views
0

У меня есть поле user_id и time поле. Поле time: timestamp Тип данных. Идентификатор пользователя может иметь много журналов. Я хочу найти сумму между временем в часах и минутах для пользователя.Сумма часов от timestamp

Мне удалось преобразовать часы и минуты, но я не могу суммировать часы для каждого идентификатора. Ниже приведен код, который я использовал.

select user_id, to_char (time_loged)as "Totalhours " 
from logtable 
+0

Считывание с использованием РСУБД. – fancyPants

+0

Временная метка представляет собой момент времени. Обычно вы ожидаете, что база данных SQL будет представлять продолжительность с типом данных INTERVAL. Разница в том, что добавление двух интервалов, которые выглядят так, имеет смысл: 3:00 + 2:00. Но добавление двух точек во времени, которые выглядят так, нет; «3 часа плюс 2 часа» - это буквально * ерунда. «3:00» (то есть 3 часа) выглядит точно так же, как «3:00» (значение 3:00), но они имеют * очень * разные значения. –

+0

Я использую oracle sql. так какой тип данных я должен использовать для работы? – mariodelcy

ответ

1

Это пример Oracle преобразования времени с помощью to_char() или to_date(). Вы можете удалить форматы день оставляя форматы времени только отделяя время до нескольких минут, секунд, а затем суммировать их как числа с to_number() ...

SELECT to_char(to_timestamp ('2013-02-14 10:07:47.000' , 'YYYY-MM-DD HH24:MI:SS.FF'),'DD-MON-YYYY HH24:MI:SS') start_date 
FROM dual 
/

    SQL> 14-FEB-2013 10:07:47 


SELECT to_date(to_char(to_timestamp ('2013-02-14 10:07:47.000' , 'YYYY-MM-DD HH24:MI:SS.FF'),'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') start_date 
FROM dual 
/

    SQL> 2/14/2013 10:07:47 AM 


SELECT to_char(to_timestamp ('2013-02-14 10:07:47.000' , 'YYYY-MM-DD HH24:MI:SS.FF'),'HH24') start_date 
FROM dual 
/

SQL> 10 

    SELECT to_number(to_char(to_timestamp ('2013-02-14 10:07:47.000' , 'YYYY-MM-DD HH24:MI:SS.FF'),'MI')) minutes 
    FROM dual 
/

    SQL> 7 

В вашем случае данных метки времени уже в то время как я должен был преобразовать свою дату to_timestamp в моем коде. Просто игнорируйте to_timestamp convesion и используйте to_char(), to_number() ...

Все мои примеры всегда проверяются. Скопируйте и вставьте последний пример, чтобы увидеть разницу с вашим кодом. Читать мои комментарии ...

+0

Я получил ошибки, когда я попытался указать данные. Вот инструкция: ive used.select id, to_char (to_number (time, 'HH24: MI')) как «Всего занятых часов» из теста; – mariodelcy

+0

@mariodelcy - посмотрите мой последний пример - скопируйте его, замените дату на вашу дату, удалите преобразование to_timestamp, если не нужно, оставив все остальное. Или вы можете скопировать/вставить, чтобы увидеть результат, а затем просто заменить мою hardcoded дату вашей и вашей таблицей ... Все примеры тестируются. Вы не можете преобразовать 'HH24: MI' в число. Сначала вам нужно отделить время до HH24, затем MI. Кроме того, вы можете использовать ключевое слово - время. Переименуйте его в tm ... – Art

+0

Спасибо. Работаю сейчас – mariodelcy

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