TRIM Трейлинг Нули - PullRequest
       65

TRIM Трейлинг Нули

1 голос
/ 02 мая 2020

Я знаю, что это относительно простой вопрос, но я не смог найти ничего с моими ключевыми словами с помощью Google. Я ссылаюсь с SQL (Oracle) на столбец с такими номерами:

  • 100
  • 12500
  • 300

Теперь мне нужно удалить последние 2 нуля. Этот подход не работает:

Trim(TRAILING '00' FROM F0035.Nr)         "Sequence", 

У кого-нибудь есть идеи?

Результатом должен быть столбец с цифрами, а не текст

Ответы [ 5 ]

1 голос
/ 02 мая 2020

Следующее выражение удалит любое число нулей из числа:

SELECT NR / POWER(10, LENGTH(REGEXP_SUBSTR(TO_CHAR(NR), '0*$')))
  FROM F0035

db <> скрипка здесь

1 голос
/ 02 мая 2020

Если в столбце содержатся числа, почему вы используете строковые операции?

Если у всех значений в конце есть два 00, то:

F0035.Nr / 100

Если у некоторых их нет, используйте a case:

(case when mod(F0035.Nr, 100) = 0 then F0035.Nr / 100 else F0035.Nr end)

Я не рекомендую преобразовывать в строку для выполнения операций с цифрами c в большинстве случаев.

1 голос
/ 02 мая 2020

См. Эти два параметра:

SQL> with test (col) as
  2    (select '100'   from dual union all
  3     select '12500' from dual union all
  4     select '300'   from dual
  5    )
  6  select col,
  7    to_number(substr(col, 1, length(col) - 2)) result_1,
  8    to_number(col) / 100 result_2
  9  from test;

COL     RESULT_1   RESULT_2
----- ---------- ----------
100            1          1
12500        125        125
300            3          3

SQL>
  • первый удаляет последние два символа (из ваших примеров данных кажется, что они всегда 00)
  • второй делит это «число» на 100
1 голос
/ 02 мая 2020
with test (col) as (
  select 10   from dual union all
  select 100  from dual union all
  select 1000 from dual union all
  select 12500 from dual union all
  select 125002 from dual union all
  select 3000   from dual
)
select col, 
case when substr(col, -2) = '00' then col/100 else col end newnum
from test;
1 голос
/ 02 мая 2020

Вы можете сделать это:

SELECT regexp_replace(F0035.Nr, '^(.*)00$', '\1')
FROM F0035

Вы можете легко настроить регулярное выражение, если ваши требования слегка изменятся, например, удалив более 2 конечных нулей (например, ^(.*)00+) или другие символы

...