我是新手。想知道是否有机会将sql server上的单词更改为*但只有50%的数据?示例:从biodata中选择名称结果:
1. Mountain 2. Grace 3. Yellow
预期结果是
1. Moun**** 2. Gr*** 3. Yel***
提前告诉你
8yoxcaq71#
尝试以下操作:
select concat ( substring(Name, 1, LEN(Name)/2), replicate('*', LEN(Name)/2) ) from biodata
--> substring(Name, 1, LEN(Name)/2) 会得到名字的前半部分--> replicate('*', LEN(Name)/2) 将重复 * 剩下一半的名字-->最后, Concat() 将连接两个字符串。
substring(Name, 1, LEN(Name)/2)
replicate('*', LEN(Name)/2)
*
Concat()
l7wslrjt2#
我想这正是你想要的,保留了单词的长度:
select word, left(left(word, len(word) / 2.0) + replicate('*', len(word)), len(word)) from (values ('Mountain'), ('Grace'), ('Yellow')) v(word);
yqhsw0fo3#
组合 len() , stuff() 以及 replicate() 我可以带你去那里。使用 len() 要知道单词的长度。使用 replicate() 要创建所需长度的星号字符串,请使用 stuff() 用星号覆盖单词的结尾。你也可以用 left() 和串联而不是 stuff() .例如:
len()
stuff()
replicate()
left()
declare @string varchar(10) = 'abcdefghij' select len(@string) -- returns 10 select left(@string, len(@string) / 2) -- returns 'abcde' select replicate('*', len(@string) / 2) -- returns '*****' select left(@string, len(@string) / 2) + replicate('*', len(@string) / 2) -- returns 'abcde*****'
我将让您决定如何处理奇数字符的字符串,以及如何整齐地组织代码以处理整个列而不是单个变量。请注意 len() 函数被反复使用,所以您可以将其排除,例如,使用 cross apply .
cross apply
3条答案
按热度按时间8yoxcaq71#
尝试以下操作:
-->
substring(Name, 1, LEN(Name)/2)
会得到名字的前半部分-->
replicate('*', LEN(Name)/2)
将重复*
剩下一半的名字-->最后,
Concat()
将连接两个字符串。l7wslrjt2#
我想这正是你想要的,保留了单词的长度:
yqhsw0fo3#
组合
len()
,stuff()
以及replicate()
我可以带你去那里。使用
len()
要知道单词的长度。使用replicate()
要创建所需长度的星号字符串,请使用stuff()
用星号覆盖单词的结尾。你也可以用left()
和串联而不是stuff()
.例如:
我将让您决定如何处理奇数字符的字符串,以及如何整齐地组织代码以处理整个列而不是单个变量。请注意
len()
函数被反复使用,所以您可以将其排除,例如,使用cross apply
.