2017-02-07 19 views
1

'X' で値を置き換え私のような私のテーブルの1つのCOL持っている:に置き換えSQL Serverクエリの出力は

COL 
[email protected] 
[email protected] 

iyara

COL 
[email protected] 
[email protected] 

を私はこのような私の出力に何かをしたいです5倍の(XXXXX)と4倍の(XXXX)

+1

まだ試しましたか? –

+1

@Tannerはい私は試しましたが、私はKx @ ymail.comのような出力を1つの 'x'だけ得ることができますが、置き換えられる文字の長さに応じて 'x'値を複製します。 –

+0

mailid、2、CHARINDEX( '@'、mailid)-2、REPLICATE( 'x'、LEN(CHARINDEX( '@'、mailid)-2)))))としてのメールアドレスfrom FROM #TT - > mailId #TTテーブルの列 –

答えて

4

これが、これはあなたが後にしている何を達成していること、それを行うには良い方法はおそらくあります:

DECLARE @email NVARCHAR(50) = '[email protected]'; 

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

-- Result: [email protected] 

これは、オンラインドキュメントによると、SQL Server 2008ので始まりREPLICATE()方法を、使用していますが、 。

REPLICATE(のTransact-SQL)

繰り返しA指定された回数だけ文字列値を返します。この中

REPLICATE (string_expression ,integer_expression)

+0

ありがとう!それは期待どおりの出力を与えています。 –

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

説明します:

は、一例として[email protected]を取り、私のクエリの各部分は、ここに示されています。

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

あなたは最長予想される電子メール名と一致するのに十分な長x年代の文字列でRIGHT()の呼び出しを置き換えることができます。

0
declare @n nvarchar(max) 
set @n='[email protected]' 
select concat(substring(@n,1,1),replicate('X',len(substring(@n,2,charindex('@',@n,1)-2))),SUBSTRING(@n,charindex('@',@n),200)) 

あなたが最初の文字を発見したANSその後、すなわちイヤラ@ゴマ彼の手紙の残りの部分は、X」に変換されますCHARINDEX ANS部分文字列を、使用して検索されたサブストリングO助けを借りて、 'レプリケート関数を使用し、残りのidを出力します。

+0

このコードスニペットでは、* how *と* why *の問題を解決して、あなたの投稿の品質を向上させるための問題を解決します(// meta.stackexchange.com/q/114762)。 。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –