You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中使用正则表达式将16位字符串中间数字替换为星号?

PostgreSQL正则替换16位数字中间部分为星号的实现方案

刚接触正则确实容易摸不着头脑,我来帮你搞定这个需求!

你需要处理的是16位纯数字格式的varchar字段,要保留前2位和后4位,中间10位替换成星号(比如1234567890123456变成12**********5678),用PostgreSQL的regexp_replace函数就能轻松实现。

基础用法示例

先看单个字符串的替换效果:

SELECT regexp_replace('1234567890123456', '^(\d{2})(\d{10})(\d{4})$', '\1**********\3');

正则表达式拆解

我给你拆解下这个正则的逻辑,方便你理解以后自己调整:

  • ^(\d{2}):^表示字符串开头,\d{2}匹配2个数字,括号()把这部分捕获为第1个分组(后面用\1引用)
  • (\d{10}):匹配中间的10个数字,捕获为第2个分组(这里我们不需要保留它,直接替换成星号)
  • (\d{4})$:$表示字符串结尾,\d{4}匹配最后4个数字,捕获为第3个分组(后面用\3引用)

替换的时候,我们把第1个分组保留,中间用10个星号填充,再拼接第3个分组,就得到了你要的格式。

批量更新表数据

如果要直接更新表中的字段(假设表名为your_table,目标字段为target_column),记得加个WHERE条件确保只处理16位数字的记录,避免误改其他数据:

UPDATE your_table
SET target_column = regexp_replace(target_column, '^(\d{2})(\d{10})(\d{4})$', '\1**********\3')
WHERE target_column ~ '^\d{16}$'; -- 只匹配纯16位数字的字符串

额外提示

如果你的字段里偶尔会有非数字字符(比如空格、连字符),可以调整正则忽略这些分隔符,但根据你的描述,字段是16位数字形式的varchar,所以上面的写法完全够用啦。

内容的提问来源于stack exchange,提问作者javax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:12:42