Регулярные выражения здесь не сильно помогут, поскольку REGEXP_REPLACE
не поддерживает шаблоны условной замены.Здесь вам нужен другой шаблон замены для случаев, когда входные данные содержат только один, два или три или более символов.
Итак, здесь лучше использовать CASE ... WHEN ... ELSE
и обычные функции обработки строк:
CREATE TABLE tabl1
(s character varying)
;
INSERT INTO tabl1
(s)
VALUES
('tata-fzef - vcefv'),
('kkk'),
('kk'),
('k')
;
SELECT
CASE
WHEN LENGTH(s) = 1 THEN '_' || s || '_'
WHEN LENGTH(s) = 2 THEN LEFT(s,1) || '_' || RIGHT(s,1)
ELSE s
END AS Result
FROM tabl1;
См. Онлайн-демонстрацию .Результат:
