我的数据库中有一个名为employee的表,结构如下:
Id email phone name
1 user@gmail.com +7845690001 Jonney
2 Nortex.zone@gmail.com +7845690781 North
例如,我有一些要屏蔽的数据 +7845690001
至 +7845690***
. 完整版本如下。
Id email phone name
1 u**r@gmail.com +7845690*** J****y
2 N*********e@gmail.com +7845690*** N***h
我设法做到了这一点的姓名和电话:
Select CONCAT(MID(phone, 1, LENGTH(phone) - 3), '***') as new_phone,
CONCAT(LEFT(name,1),REPEAT("*",LENGTH(name)-2),RIGHT(name,1)) as new_name from employee.
我怎样才能通过电子邮件做到这一点?
5条答案
按热度按时间pbpqsu0x1#
终于找到了答案:
谢谢大家。:)
flvlnr442#
您可以使用mysql的字符串函数:
LEFT()
,RIGHT()
,LENGTH()
,REPEAT()
,和SUBSTRING_INDEX()
.我只为你做这件事
email
:q43xntqr3#
您可以在mysql中使用concat和substring函数。电子邮件和姓名具有相同的功能,名称使用相同的东西,并根据您的要求更改数字。
编辑
w3nuxt5m4#
要用确切的字符数填充,可以使用lpad函数。对于name,您可以执行以下操作:
对电子邮件使用基于上层查询的查找和更改索引。
3mpgtkmj5#
regexp\u替换也可以做到这一点。以下是如何处理电子邮件:
说明:
(?!^) 我们确保匹配的字符不在字符串的开头,这样我们就跳过了第一个字符。
. 匹配要替换的字符
(?=[^@]+@)我们将在一个序列处停止,该序列是任何不是@的字符,然后后跟@。
两个字符之间匹配的每个字符都将被函数替换为*(第三个参数)。
对于电话号码,我将展示一个更简单的解决方案:
[0-9]{3}正好匹配三位数字
$表示它们必须在字符串的末尾。
然后我们用三星代替它们。请注意,此解决方案假设您总是以电话号码总是以三位数结尾的方式存储电话号码。例如,如果我输入一个像“555-55-55-55”这样的电话,什么都不会被屏蔽。如果您不总是以相同的格式插入规范化的电话,那么您必须考虑更复杂的事情(例如fetch digit-fetch zero or more non digits-fetch digit-fetch zero or more non digits-fetch digit-fetch digit-end of string,然后用三个*替换匹配的内容)。这样地:
这里[0-9]表示一个数字,[^0-9]*表示零个或多个非数字。当然,同样的事情也可以简化,把数字和零个或更多的非数字放在一组中,然后重复三次:
对于名称,我们可以执行以下操作:
所以我们再次跳过第一个字符,然后匹配并替换每个字符,直到字符串的最后一个字符。
重要提示:在上述示例中,我们保留字符串的长度。如果您想要更高的匿名性,可以按组获取数据,然后用单个*替换所需的组。例如电子邮件:
这将取代john@gmail.dom 至jn@gmail.dom 以及margareth@gmail.dom 到mh@gmail.dom. 所以它也掩盖了长度。说明:
^是字符串的开头
是我们的第一组。它是一个字符
(.)+是第二组。它是一个或多个字符。
([^@]@.+)是我们的第三组。它是一个字符,不是@,后跟@,然后后跟一个或多个字符(任意)。
我们将其替换为\1(第一组),后跟单个*,后跟\3(第三组)。