使用SQL查询隐藏电子邮件地址中的字符

时间:2016-07-21 08:45:52

标签: sql sql-server substring

我有一个非常具体的业务要求,当从SQL返回时隐藏电子邮件地址中的某些字符,并且我已达到了使用SQL实现此目的的极限。我想知道是否有人能指出我正确的方向。从本质上讲,我的业务是要求以下内容:

test@email.com成为t*\*t@e**l.com

thislong@emailaddress.com成为t******h@e**********s.com

我知道如果在@之前的电子邮件的任何部分少于3个字符,那么这将不起作用,但我打算检查这个并适当地处理它。我尝试过SUBSTRING,STUFF,LEFT / RIGHT等混合物,但我不能完全正确。

5 个答案:

答案 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