使用sql方案的SQL Server查询输出将值替换为' x'

时间:2017-02-07 10:10:18

标签: sql sql-server sql-server-2008

我的表中有一个col,如:

COL
Kiyara@ymail.com
Akira@zmail.com

我希望我的输出像这样:

COL
Kxxxxx@ymail.com
Axxxx@zmail.com

iyara替换为5x(xxxxx)和' kira' 4x' s(xxxx)

4 个答案:

答案 0 :(得分:4)

这可能是一种更好的方法,但这可以实现你所追求的目标:

DECLARE @email NVARCHAR(50) = 'Kiyara@ymail.com';

SELECT  LEFT(@email, 1) + REPLICATE('X',
                                    LEN(SUBSTRING(@email, 2,
                                                  CHARINDEX('@', @email) - 1)))
        + SUBSTRING(@email, CHARINDEX('@', @email), LEN(@email));

-- Result: KXXXXXX@ymail.com

这使用 REPLICATE() 方法,根据在线文档从SQL Server 2008开始。

  

REPLICATE(Transact-SQL)

     

重复指定次数的字符串值。

     

REPLICATE ( string_expression ,integer_expression )

答案 1 :(得分:1)

SELECT LEFT(col, 1) + RIGHT('xxxxxxxxxxxxxxxx', CHARINDEX('@', col) - 2) +
       SUBSTRING(col, CHARINDEX('@', col), LEN(col) - CHARINDEX('@', col) + 1);

<强>解释

Kiyara@ymail.com为例,此处显示我的每条查询。

K           LEFT(col, 1)
xxxxx       RIGHT('xxxxxxxxxxxxxxxx', CHARINDEX('@', col) - 2)
@ymail.com  SUBSTRING(col, CHARINDEX('@', col), LEN(col) - CHARINDEX('@', col) + 1)

请注意,您可以将RIGHT()的号码替换为x字符串,其长度足以与您预期的最长电子邮件名称相匹配。

答案 2 :(得分:0)

试试吧

select substring('Akira@zmail.com',1,1) + REPLICATE('x',charindex('@','Akira@zmail.com')) + SUBSTRING('Akira@zmail.com',charindex('@','Akira@zmail.com'),200)

按列或任何您想要的内容更改电子邮件

答案 3 :(得分:0)

 declare @n nvarchar(max)
 set @n='Kiyara@ymail.com'
 select concat(substring(@n,1,1),replicate('X',len( substring(@n,2,charindex('@',@n,1)-2))),SUBSTRING(@n,charindex('@',@n),200))

在这个帮助o子字符串中你找到第一个字母ans然后其余的字母直到@ ie iyara使用charindex ans substring搜索,它将使用复制函数转换为'x',然后打印其余的id。 / p>