Как преобразовать строку в десятичное число в указанном формате в SQL (Oracle) - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть столбец типа varchar, имеющий следующие значения

Values in column     Output should be
000025               00.25
002340               23.40
239044               2390.44
000305               3.05
000100               1.00

, когда я использую to_number Я получаю простое число (например, 25,2340,239044), но мне нужно его в указанном выше десятичном числе,

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

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

to_char(to_number(orig_str)/100, '9990.00') as new_str

Демонстрация:

-- CTE for sample data
with your_table(orig_str) as (
  select 000025 from dual
  union all select 002340 from dual
  union all select 239044 from dual
  union all select 000305 from dual
  union all select 000100 from dual
)
-- query
select orig_str,
  to_char(to_number(orig_str)/100, '9990.00') as new_str
from your_table;

  ORIG_STR NEW_STR 
---------- --------
        25     0.25
      2340    23.40
    239044  2390.44
       305     3.05
       100     1.00

Если вы хотите выравнивание, как показано в вопросе, со всеми значениями по левому краю, а не по десятичной запятой, вы можете добавить модификатор формата FM , который подавляет пробелы:

select orig_str,
  to_char(to_number(orig_str)/100, 'FM9990.00') as new_str
from your_table;

  ORIG_STR NEW_STR 
---------- --------
        25 0.25    
      2340 23.40   
    239044 2390.44 
       305 3.05    
       100 1.00    
0 голосов
/ 17 декабря 2018

Возможно:

select cast(to_number(val) / 100 as decimal(5, 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...