Заменить строку в oracle - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть номер столбца, мне нужно заменить первое число на 7 в oracle. Как заменить парни?

number    want_number
4789654   7789654
2754678   7754678
1765689   7765689

Ответы [ 3 ]

2 голосов
/ 03 апреля 2020

Например,

REGEXP_REPLACE(number, '^\d', '7')

должно работать.

1 голос
/ 03 апреля 2020

Или вариант substring с конкатенацией:

SQL> with test (num) as
  2    (select 4789654 from dual union all
  3     select 2754678 from dual union all
  4     select 1765689 from dual
  5    )
  6  select num, '7' || substr(num, 2) wanted_num
  7  from test;

       NUM WANTED_NUM
---------- --------------------
   4789654 7789654
   2754678 7754678
   1765689 7765689

SQL>
0 голосов
/ 03 апреля 2020

Вы можете манипулировать как числа, а не преобразовывать (и предположительно позже обратно) строки:

with your_table (original) as (
            select 4789654 from dual
  union all select 2754678 from dual
  union all select 1765689 from dual
  union all select 999 from dual
  union all select 1000 from dual
  union all select 1001 from dual
)
select original,
  original
    - trunc(original, -floor(log(10, original)))
    + 7 * power(10, floor(log(10, original))) as wanted
from your_table;

  ORIGINAL     WANTED
---------- ----------
   4789654    7789654
   2754678    7754678
   1765689    7765689
       999        799
      1000       7000
      1001       7001

floor(log(10, original) дает вам величину числа. Например, для вашего первого исходного значения 4789654, которое оценивается как 6. Если вы затем наберете trunc(original, -floor(log(10, original))), то есть trunc(4789654, -6), который обнуляет шесть младших значащих цифр, давая вам 4000000. Вычитая это из исходного значения, вы получите 789654. Затем power(10, floor(log(10, original))) дает вам power(10, 6), что составляет 1000000, умножение на 7 дает 7000000 и добавление этого значения дает 7789654.

(Это не сработает, если исходное значение <= ноль , но это выглядит маловероятным?) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...