Как заменить все символы в строке кроме первого и последнего?

Есть фраза - "ПРЫГНИСЮДА". Как написать запрос, чтобы выдавалось П********А?

Писал через:

regexp_replace('ПРЫГНИСЮДА', '.' , '*', 2)

Но не могу понять, как написать на регулярке до последнего символа в строке.


Ответы (2 шт):

Автор решения: SyntaxErrorLineNULL

SELECT regexp_replace( 'hellllow', '(^\D{1})(.*)(\D{1}$)', '\1**********\3' ) example FROM dual;

Результат: h**********w

→ Ссылка
Автор решения: 0xdb

Зачем тут регулярные выражения? Взять первый символ, последний символ, между ними подсчитаное (или заданное) кол-во звёздочек, готово:

select 
    substr (str, 1, 1)||rpad ('*', length (str)-2, '*')||substr (str, -1, 1) res 
from t1

Если всё таки регулярным выражением, то так:

select 
    regexp_replace (str, '.*(.$)', rpad ('*', length (str)-2, '*')||'\1', 2) res 
from t1

Запросы выше можно попробовать на db<>fiddle, оба вернут ожидаемый результат:

RES
----------------
1*3
a****f
#******/
→ Ссылка