如何在PostgreSQL中屏蔽电子邮件

fdbelqdn  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(2)|浏览(149)

如何在PostgreSQL中屏蔽电子邮件地址字符串?
我想屏蔽电子邮件如下testemail@gmail.com到te*****il@gmail.com

  • 取消屏蔽电子邮件域前的前两个和后两个字符(@符号)
  • 用 * 屏蔽中间的所有字符

我试图用

  • POSITION标识@符号
  • LENGTHPOSITION左侧的字符)

但是PostgreSQL没有一个类似于excel =REPLACE (old_text, start_num, num_chars, new_text)的简洁的解决方案,您可以设置start_numnum_chars

bejyjqdl

bejyjqdl1#

试试这个:

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)$$;
jslywgbw

jslywgbw2#

要屏蔽PostgreSQL中的电子邮件,您可以使用regexp_replace函数。
其语法为regexp_replace(source, pattern, replacement [, start [, N ]] [, flags ])
SQL查询:

SELECT t.email, 
       regexp_replace(t.email, '(.{2}(.+)(.{2})(@.+))', '$1*****$3$4') AS masked_email 
  FROM tbl t;

输出:

| email               | masked_email        |
|---------------------|---------------------|
| testemail@gmail.com | te*****il@gmail.com |

相关问题