【问题标题】:SQL Server Query Output with sql scenario replace values with 'x' [duplicate]使用 sql 场景的 SQL Server 查询输出将值替换为“x”[重复]
【发布时间】:2017-02-07 10:10:18
【问题描述】:

我的表中有一个列,例如:

COL
Kiyara@ymail.com
Akira@zmail.com

我希望我的输出是这样的:

COL
Kxxxxx@ymail.com
Axxxx@zmail.com

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

【问题讨论】:

  • 你有没有尝试过!
  • @Tanner 是的,我已经尝试过了,但是我能够获得像 Kx@ymail.com 这样的输出,只有单个“x”,但我希望根据长度复制“x”值被替换的字符数。
  • SELECT STUFF(mailid,2,CHARINDEX('@',mailid)-2,REPLICATE('x', LEN(CHARINDEX('@',mailid)-2))) as mailid FROM #TT-->mailId 是#TT 表中的列
  • @Tanner 它似乎不是该链接的 exact 副本,但也许 OP 可以将它拼凑起来。

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


【解决方案1】:

可能有更好的方法来做到这一点,但这可以实现您所追求的:

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 开始。

复制 (Transact-SQL)

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

REPLICATE ( string_expression ,integer_expression )

【讨论】:

  • 谢谢!它按预期提供输出。
【解决方案2】:
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)

请注意,您可以用足够长的 x 字符串替换对 RIGHT() 的调用,以匹配您最长的预期电子邮件名称。

【讨论】:

    【解决方案3】:

    试试看

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

    按列或任何您想要的方式更改电子邮件

    【讨论】:

      【解决方案4】:
       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,然后是其余字母 til @,即使用 charindex ans 子字符串搜索 iyara,使用复制函数将其转换为“x”,然后打印剩余 id。

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,包括说明 如何为什么 这解决了问题 would really help 以改进你的帖子质量。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      相关资源
      最近更新 更多