我有一个非常具体的业务要求,当从SQL返回时隐藏电子邮件地址中的某些字符,并且我已达到了使用SQL实现此目的的极限。我想知道是否有人能指出我正确的方向。从本质上讲,我的业务是要求以下内容:
test@email.com
成为t*\*t@e**l.com
或
thislong@emailaddress.com
成为t******h@e**********s.com
我知道如果在@之前的电子邮件的任何部分少于3个字符,那么这将不起作用,但我打算检查这个并适当地处理它。我尝试过SUBSTRING,STUFF,LEFT / RIGHT等混合物,但我不能完全正确。
答案 0 :(得分:1)
NUL
结果将是 È******ë@克*** l.com
答案 1 :(得分:1)
非常有趣且非常难以生成通用解决方案试试这个
这可能会对你有所帮助
DECLARE @String VARCHAR(100) = 'sample@gmail.com'
SELECT STUFF(STUFF(@STring,
CHARINDEX('@',@String)+2,
(CHARINDEX('.',@String, CHARINDEX('@',@String))-CHARINDEX('@',@String)-3),
REPLICATE('*',CHARINDEX('.',@String, CHARINDEX('@',@String))-CHARINDEX('@',@String)))
,2
,CHARINDEX('@',@String)-3
,REPLICATE('*',CHARINDEX('@',@String)-3))
OUTPUT
s****e@g******l.com
thislong@emailaddress.com的类似方式
OUTPUT
t******g@e*************s.com
答案 2 :(得分:0)
您也可以使用正则表达式。这样的事情(没有完全完成):
select regexp_replace('test@email.com', '^(.?).*@(.?).*', '\1***@\2***')
from dual
结果:
t***@e***
如果只能使用SELECT语句,那么它可能是一个有用的解决方案。
答案 3 :(得分:0)
CREATE FUNCTION dbo.EmailObfuscate
( @Email VARCHAR(255)
) RETURNS TABLE AS RETURN
(
SELECT adr.email
, LEFT (adr.email, 1)
+ REPLICATE ('*', AtPos-3)
+ SUBSTRING (adr.Email, AtPos-1, 3)
+ REPLICATE ('*', Length-DotPos - AtPos - 2)
+ SUBSTRING (adr.Email, Length - DotPos, 10) AS hide
FROM ( VALUES ( @Email) ) AS ADR (EMail)
CROSS APPLY ( SELECT CHARINDEX ('@', adr.Email)
, CHARINDEX ('.', REVERSE(Adr.Email))
, LEN (Adr.Email)
) positions ( AtPos
, dotpos
, Length
)
);
GO
-- Calling
SELECT Emails.*
FROM ( Values ( 'this.long@emailaddress.com')
, ( 'test@email.com' )
, ( 'sample@gmail.com' )
, ( 'test@gmx.de' )
) AS adr (email)
CROSS APPLY dbo.EmailObfuscate (Adr.Email) AS Emails
答案 4 :(得分:0)
SELECT
-- Email here is the name of the selected Column from your Table
--Display the First Character
SUBSTRING(Email,1,1)+
--Replace selected Number of *
REPLICATE('*',10)+
--Display the One Character before @ along with @ & One Character after @
SUBSTRING(Email,CHARINDEX('@',Email)-1,3)+
--Replace selected Number of *
REPLICATE('*',10)+
--Display. Character along with the rest selected Number of Characters
SUBSTRING(Email,CHARINDEX('.',Email)-1, LEN(Email) -
CHARINDEX('.',Email)+12)
--NameEmail is the Table Name
FROM NameEmail
结果是:
Ĵ**********升@一个********** a.co.uk