Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Теоретические аспекты и практические реализации создания, внедрения и использования баз данных, СУБД, хранилищ.
  • Страница:
  • 1
  • 2

ТЕМА: Задача с умножением в Oracle

Задача с умножением в Oracle 17 июль 2011 10:17 #2322

  • Joker
  • Joker аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 46
  • Спасибо получено: 0
всем хорошего дня.
Есть таблица, в ней поле с записями в виде дробных чисел -0.47, 3.55, и целые типа- 24, 00. Необходимо выделить целую часть и к ней прибавить дробную с умножением на 0,6. Т.е. сделать формата чч:мм.
Пробовал такой вариант
select concat(regexp_substr('0.47', '[^.]*'),substr('0.47', instr('0.47', '.'))*0.6) from dual
0.282
select concat(regexp_substr('2.47', '[^.]*'),substr('2.47', instr('2.47', '.'))*0.6) from dual
2.282

Но та конструкция для целого 24, выдает не верное значение:
select concat(regexp_substr('24', '[^.]*'),substr('24', instr('24', '.'))*0.6) from dual
2414.4

Пока что на ум ничего путного не приходит. В-общем друзья, прошу помощи.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Задача с умножением в Oracle 17 июль 2011 10:18 #2323

with s as
(select '0.47' str from dual union all
 select '2.47' str from dual union all
 select '24.47' str from dual 
)
select substr(str, 1, instr(str, '.') - 1)  || ':' || substr((substr(str, instr(str, '.') + 1) * 0.6), 1, 2)
from s

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Задача с умножением в Oracle 17 июль 2011 10:19 #2324

  • Dior
  • Dior аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 41
  • Спасибо получено: 0
при условии чисел >=0
WITH t AS (SELECT 0.47 num FROM dual UNION ALL
           SELECT 2.47 FROM dual UNION ALL
           SELECT 24 FROM dual)
SELECT floor(num)+(num-floor(num))*0.6 FROM t

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Задача с умножением в Oracle 17 июль 2011 10:20 #2325

Вай вай... Нашла у себя ошибку. Вместо
select substr(str, 1, instr(str, '.') - 1)  || ':' || substr((substr(str, instr(str, '.') + 1) * 0.6), 1, 2)
from s

нужно
select substr(str, 1, instr(str, '.') - 1) || ':' || to_char(substr(str, instr(str, '.') + 1) * 0.6, '09')
from s

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Задача с умножением в Oracle 17 июль 2011 10:23 #2326

  • Dior
  • Dior аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 41
  • Спасибо получено: 0

Т.е. сделать формата чч:мм.

WITH t AS (SELECT 0.47 num FROM dual UNION ALL
           SELECT 2.47 FROM dual UNION ALL
           SELECT 24 FROM dual)
SELECT floor(num)||':'||lpad(round((num-floor(num))*60),2,'0') FROM t

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Dior.

Re: Задача с умножением в Oracle 17 июль 2011 10:25 #2327

  • Gubin
  • Gubin аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 42
  • Спасибо получено: 0
with t as 
  (select 24 num from dual
    union all
   select 0.47 from dual
    union all
   select 16.17 from dual )
select to_char(trunc(num) + mod(num, 1)*0.6, 'fm00D00', 'nls_numeric_characters='': ''')
  from t;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2