[英]Replace alphabets in a string with a character and number with another character in T-SQL
I have string like ' A9Tf6Uv54
', Now I want replace it with ' xzxxzxxzz
' format. 我有类似“ A9Tf6Uv54
”的字符串,现在我想将其替换为“ xzxxzxxzz
”格式。
In other words alphabetic characters are replaced with ' x
' and numbers with ' z
'. 换句话说,字母字符被替换为“ x
”,数字被替换为“ z
”。
How can I replace both numeric and alphabets with different character in SQL? 如何在SQL中用不同的字符替换数字和字母?
You can do like this: 您可以这样:
DECLARE @StringText VARCHAR(20) = 'A9Tf6Uv54';
DECLARE @digitReplacement VARCHAR(20) = 'z';
DECLARE @letterReplacement VARCHAR(20) = 'x';
WHILE PATINDEX('%[^0-9'+@letterReplacement+']%',@StringText)>0
SET @StringText = STUFF(@StringText,PATINDEX('%[^0-9'+@letterReplacement+']%',@StringText),1,@letterReplacement)
WHILE PATINDEX('%[0-9]%',@StringText)>0
SET @StringText = STUFF(@StringText,PATINDEX('%[0-9]%',@StringText),1,@digitReplacement)
--RESULT
xzxxzxxzz
ifound bug and fix it -:) ifound错误并修复--)
declare @r int=1 --pointer to next letter in the string
declare @l int = (select len('A9Tf6Uv54'))
declare @str varchar(100)='' -- init the new str
declare @x varchar(10)='x' --replace number
declare @z varchar(10)='z' --replace char
while @l!=0 --loop ending at the end of the original str
begin
if (ascii(substring('A9Tf6Uv54',@r,1)) between 48 and 57)
begin
set @str=ltrim(@str)+@z
set @l=@l-1
set @r=@r+1
end
else
begin
set @str=ltrim(@str)+@x
set @l=@l-1
set @r=@r+1
end
end
select @str
> >
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.