Как удалить первые 3 и последние 5 символов из столбца учетной записи в oracle sql? - PullRequest
1 голос
/ 30 марта 2020

Как удалить первые 3 и последние 5 символов из столбца учетной записи в oracle sql?

У меня есть столбец Учетная запись. Пример номера счета "99k9220000709999" В результате номер счета должен отображаться как "92200007". Нужен oracle sql запрос. Кто-нибудь может предложить?

Ответы [ 4 ]

1 голос
/ 30 марта 2020

substr следует сделать трюк - вы начинаете с позиции 4 и берете длину столбца минус 5 + 3 = 8:

SELECT SUBSTR(mycolumn, 4, LENGTH(mycolumn) - 8)
FROM   mytable
1 голос
/ 30 марта 2020

Другой метод левой части обрезает деталь до символа, где заканчивается буква, а затем извлекает оставшуюся строку без последних пяти символов как

WITH t(str) AS
(
 SELECT '99k9220000709999' FROM DUAL
), t2 AS
(
SELECT regexp_substr(str,'[^[:alpha:]]+$') as str
  FROM t
)
SELECT substr( str,1, length(str)-5 ) as "Result"
  FROM t2
0 голосов
/ 31 марта 2020

Зачем делать это простым, если мы можем сделать его сложным (для развлечения)?

SQL> with test (id, account) as
  2    (select 1, '99k9220000709999' from dual union all
  3     select 2, '002LF004828xx'    from dual
  4    ),
  5  split as
  6    (select id,
  7            column_value lvl,
  8            regexp_substr(account, '[^.]', 1, column_value) chr,
  9            max(length(account)) over (order by null) len
 10     from test cross join table(cast(multiset(select level from dual
 11                                              connect by level <= length(account)
 12                                             ) as sys.odcinumberlist))
 13    )
 14  select id,
 15         listagg(chr, '') within group (order by lvl) result
 16  from split
 17  where lvl between 4 and len - 5
 18  group by id;

        ID RESULT
---------- --------------------
         1 92200007
         2 LF004828

SQL>
0 голосов
/ 30 марта 2020

Вы можете играть с substr() и length(). Другой метод заключается в использовании регулярных выражений:

select regexp_replace('99k9220000709999', '^.{3}(.*).{5}$', '\1')
from dual;

Не обязательно, однако, самый эффективный способ.

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