如何在Redshift中实现CPF字段的000.000.000-00格式掩码
Redshift 的 TO_CHAR 数值格式化规则仅允许存在一个小数点分隔符,因此无法直接通过格式模板实现多符号的 CPF 掩码转换,可通过字符串处理函数实现需求,两种常用可行方案如下:
方案1:正则替换(写法简洁)
先将 cpf 字段转为11位补全前导零的字符串,再通过正则分组插入分隔符:
SELECT cpf, REGEXP_REPLACE(LPAD(cpf::VARCHAR, 11, '0'), '([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})', '$1.$2.$3-$4') AS mask_cpf FROM CPF;
如果你的 cpf 字段本身就是长度为11位的字符串类型,且已经保留前导零,可以直接省略 LPAD 处理步骤,简化为:
SELECT cpf, REGEXP_REPLACE(cpf, '([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})', '$1.$2.$3-$4') AS mask_cpf FROM CPF;
方案2:字符串截取拼接(兼容性更高)
通过分段截取字符串后拼接分隔符,逻辑更直观,适配各类边缘场景:
SELECT cpf, SUBSTRING(cpf_str, 1, 3) || '.' || SUBSTRING(cpf_str, 4, 3) || '.' || SUBSTRING(cpf_str, 7, 3) || '-' || SUBSTRING(cpf_str, 10, 2) AS mask_cpf FROM ( SELECT cpf, LPAD(cpf::VARCHAR, 11, '0') AS cpf_str FROM CPF ) t;
以上两种方案均可以实现你需要的 000.000.000-00 格式的 CPF 掩码效果。
内容的提问来源于stack exchange,提问作者Ranier Cordeiro
相关产品推荐
相关产品推荐

