sql—如何将数据更改为*但仅为单词的50%

z18hc3ub  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(282)

我是新手。想知道是否有机会将sql server上的单词更改为*但只有50%的数据?示例:从biodata中选择名称
结果:

1. Mountain
2. Grace
3. Yellow

预期结果是

1. Moun****
2. Gr***
3. Yel***

提前告诉你

8yoxcaq7

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() 将连接两个字符串。

l7wslrjt

l7wslrjt2#

我想这正是你想要的,保留了单词的长度:

select word,
       left(left(word, len(word) / 2.0) + replicate('*', len(word)), len(word))
from (values ('Mountain'), ('Grace'), ('Yellow')) v(word);
yqhsw0fo

yqhsw0fo3#

组合 len() , stuff() 以及 replicate() 我可以带你去那里。
使用 len() 要知道单词的长度。使用 replicate() 要创建所需长度的星号字符串,请使用 stuff() 用星号覆盖单词的结尾。你也可以用 left() 和串联而不是 stuff() .
例如:

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 .

相关问题