Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод миллисекунд в ddd HH:mi:ss 
V
    Опции темы
frikey
  Дата 31.8.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Народ, помогите составить запрос. 
Есть таблица содержащая колонку с миллисекундами. необходимо составить запрос, результатом которого было бы представление миллисекунд в формате DDD HH:MI:SS, где, DDD - кол-во дней, HH - часов, MI - минут, SS - секунд, умещяющихся в данном значении в миллисекундах.
например:
148386 = 1 день 17 часов 13 минут 6 секунд => DDD HH:Mi:ss => 001 17:13:06 (такое нужно получить на выходе).

PL/SQL, использовать нельзя, соответственно свои функции писать нельзя тоже. Можно использовать только обычные запросы и встроенные функции.
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 31.8.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



автор точно себе представляет значение слова "миллисекунда"?
PM MAIL   Вверх
frikey
Дата 31.8.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



прошу прощения, а что не так?
PM MAIL WWW ICQ Skype GTalk   Вверх
Zloxa
Дата 31.8.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(frikey @  31.8.2009,  12:56 Найти цитируемый пост)
что не так

RTFM милли
Цитата(frikey @  31.8.2009,  12:42 Найти цитируемый пост)
СРОЧНО!

RTFM Не помечайте свой вопрос как "Срочный", даже если для вас он именно такой
Цитата(frikey @  31.8.2009,  12:42 Найти цитируемый пост)
составить запрос.

Код

Connected to Oracle9i Enterprise Edition Release 9.2.0.6.0 
 
SQL> select to_char(interval '148386' second) from dual;
 
TO_CHAR(INTERVAL'148386'SECOND
------------------------------
+01 17:13:06.000000



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 31.8.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Код

SQL> select to_char(numtodsinterval(s,'second')) inrvl  from (select 148386 s from dual);
 
INRVL
-----------------------------
+000000001 17:13:06.000000000
 
SQL>



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
frikey
Дата 31.8.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



И правда, с миллисекундами напутал. Но тогда 148386000 - это миллисекунды.

select to_char(interval '148386' second) from dual; - и таким запросом не посчитать. ORA-01873 валится.
PM MAIL WWW ICQ Skype GTalk   Вверх
Zloxa
Дата 31.8.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(frikey @  31.8.2009,  15:00 Найти цитируемый пост)
и таким запросом не посчитать. ORA-01873 валится. 

Ошибка в 17й строке.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
frikey
Дата 31.8.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата(Zloxa @ 31.8.2009,  15:05)
Ошибка в 17й строке.

Прошу прощения, не понял. Не могли бы разъяснить? 
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 31.8.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



Это столь же информативный ответ, сколь информативное сообщение об ошибке "ORA валится".

PM MAIL   Вверх
DimW
Дата 1.9.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(frikey @  31.8.2009,  15:00 Найти цитируемый пост)
ORA-01873 валится.

играете не честно:
Код

SQL> select to_char(interval '148386' second) from dual;
 
TO_CHAR(INTERVAL'148386'SECOND
------------------------------
+01 17:13:06.000000


и

Код

SQL> select to_char(interval '148386000' second) from dual;
 
select to_char(interval '148386000' second) from dual
 
ORA-01873: the leading precision of the interval is too small


а теперь сравните их  smile 

Цитата

ORA-01873 the leading precision of the interval is too small

Cause: The leading precision of the interval is too small to store the specified interval.

Action: Increase the leading precision of the interval or specify an interval with a smaller leading precision.




Это сообщение отредактировал(а) DimW - 1.9.2009, 09:16
PM MAIL ICQ   Вверх
frikey
Дата 1.9.2009, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Всё как раз таки честно.

148386000 миллисекунд - это и есть 1 день 17 часов и так далее.

А две функции которые приведены... Значение миллисекунд в базе может быть какое угодно, так что вполне возможна и ситуация когда число по количеству знаков ещё больше. Так что ситуация с эксепшеном не обман, а вполне реальная проблема.
PM MAIL WWW ICQ Skype GTalk   Вверх
Zloxa
Дата 1.9.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(frikey @  1.9.2009,  20:47 Найти цитируемый пост)
а вполне реальная проблема.

ну ну.
Код

SQL> select trunc(s/1000/*ms*//60/*s*//60/*m*//24/*h*/) days
  2         ,trunc(mod(s,1000*60*60*24)/1000/60/60) hours
  3         ,trunc(mod(s,1000*60*60)/1000/60) minutes
  4         ,trunc(mod(s,1000*60)/1000) seconds
  5         ,mod(s,1000) milliseconds
  6  from (select 148386013 s from dual)
  7  ;
 
      DAYS      HOURS    MINUTES    SECONDS MILLISECONDS
---------- ---------- ---------- ---------- ------------
         1         17         13          6           13

надеюсь не надо объяснять что с этим можно сделать?

Добавлено через 4 минуты и 6 секунд
Цитата(frikey @  1.9.2009,  20:47 Найти цитируемый пост)
148386000 миллисекунд - это и есть 1 день 17 часов и так далее.

Только для того чтобы первести в секунды надо разделить на тыщщу
И все равно враки
Код

SQL> select to_char(numtodsinterval(s/1000,'second')) s_is_msecond
  2         ,to_char(numtodsinterval(s,'second')) s_is_second
  3  from (select 148386000  s from dual)
  4  ;
 
S_IS_MSECOND                  S_IS_SECOND
----------------------------- -----------------------------
+000000001 17:13:06.000000000 +000001717 10:20:00.000000000



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
frikey
Дата 2.9.2009, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата

SQL> select trunc(s/1000/*ms*//60/*s*//60/*m*//24/*h*/) days
  2         ,trunc(mod(s,1000*60*60*24)/1000/60/60) hours
  3         ,trunc(mod(s,1000*60*60)/1000/60) minutes
  4         ,trunc(mod(s,1000*60)/1000) seconds
  5         ,mod(s,1000) milliseconds
  6  from (select 148386013 s from dual)
  7  ;

Zloxa, Вот за это спасибо.

PM MAIL WWW ICQ Skype GTalk   Вверх
Zloxa
Дата 2.9.2009, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(frikey @  2.9.2009,  06:03 Найти цитируемый пост)
Вот за это

Ну ну.. этой великой истине - как пересчитать часы/минуты в секунды нас учили, если не ошибаюсь, в третьем классе.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.