我的用户帐户至少需要3个字符。我重复使用现有的名称,例如
从tata-fzef
字段中输入“ vcefv
-kk
”或“ IMP_FR
”进行此帐户。
在第二个示例中,“ kk
”应变为“ k_k
”,因为少于3个字符。
如何使用Postgresql做到这一点?
regexp_replace( IMP_FR , regexp, first_character + '_' + last character, 'g')
答案 0 :(得分:2)
由于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;
请参见online demo。结果: