Regex_replace Postgres-检查是否<= 2个字符的长度

时间:2019-02-06 07:55:45

标签: regex postgresql

我的用户帐户至少需要3个字符。我重复使用现有的名称,例如

tata-fzef字段中输入

vcefv-kk”或“ IMP_FR”进行此帐户。

在第二个示例中,“ kk”应变为“ k_k”,因为少于3个字符。

如何使用Postgresql做到这一点?

regexp_replace( IMP_FR , regexp, first_character + '_' + last character, 'g') 

1 个答案:

答案 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。结果:

enter image description here