如何在PostgreSQL中屏蔽电子邮件

如何在PostgreSQL中屏蔽电子邮件,postgresql,Postgresql,如何在PostgreSQL中屏蔽电子邮件地址字符串 我想屏蔽电子邮件如下 testemail@gmail.com进入te*****il@gmail.com 取消屏蔽电子邮件域前的前两个和最后两个字符(@ (符号) 使用遮罩在之间的所有字符* 我已尝试使用 定位以识别@符号 位置左侧字符的长度 然而,PostgreSQL没有一个类似于excel的简洁解决方案=REPLACE(旧文本、开始字符、数字字符、新文本),您可以在这里设置开始字符和数字字符尝试以下方法: SELECT overlay

如何在PostgreSQL中屏蔽电子邮件地址字符串

我想屏蔽电子邮件如下 testemail@gmail.com进入te*****il@gmail.com

  • 取消屏蔽电子邮件域前的前两个和最后两个字符(@ (符号)
  • 使用遮罩在之间的所有字符*
我已尝试使用

  • 定位
    以识别@符号
  • 位置左侧字符的长度
然而,PostgreSQL没有一个类似于excel的简洁解决方案
=REPLACE(旧文本、开始字符、数字字符、新文本)
,您可以在这里设置
开始字符和
数字字符

尝试以下方法:

SELECT overlay(
          'testemail@gmail.com'
           placing repeat('*',
                          position('@' in 'testemail@gmail.com') - 5
                         )
           from 3
           for position('@' in 'testemail@gmail.com') - 5
       );

       overlay       
---------------------
 te*****il@gmail.com
(1 row)
您可以从中创建一个SQL函数,以便:

CREATE FUNCTION mask_email(text) RETURNS text
   LANGUAGE SQL IMMUTABLE AS
$$SELECT overlay($1 placing repeat('*', position('@' in $1) - 5) from 3 for position('@' in $1) - 5)$$;