读书人

去除字符串中的字母解决思路

发布时间: 2012-02-27 10:00:22 作者: rapoo

去除字符串中的字母

遇到一个问题,一列用户名数据中有这样的情况,如“张三 ZJ”,“李四 N Y ”,现在不需要后面的字母信息了,能有效率高点的算法吗?各位给推荐一个?
谢谢

我自己写了一个,效率太低,大家批评一下:

SQL code
--更新用户名后面的字母信息,如“ZJ”等信息  Declare @vctel varchar(20)  Declare @vcName varchar(20)  Declare @vcRe  varchar(20)  Declare @Leng int  Declare @Temp varchar(2)   Declare Check_Name cursor for select vctel, vcName from userinfo  where vcName<>''   Open Check_Name  Fetch Next from Check_Name into @vctel,@vcName  While @@Fetch_Status=0    begin      set   @Leng=len(@vcName)      while @Leng>0         begin               set @Temp=substring(@vcName,@Leng,1) --从后往前找           if (ASCII(@Temp) between 65 and 90) or (ASCII(@Temp) between 97 and 122) --大小写字母               begin                set @Temp=''              end              set @vcRe=@Temp+@vcRe              set @Leng=@Leng-1         end  Update userinfo set vcName=@vcRe where current of Check_Name  set @vcRe=''  Fetch  Next from Check_Name into @vctel,@vcName  end   Close Check_Name  DealLocate Check_Name


[解决办法]
//TSQL不适合做这些,即使做也不应该用游标!

Delphi(Pascal) code
uses  PerlRegEx;procedure TForm1.btn1Click(Sender: TObject);var  reg:TPerlRegEx;begin  reg:=TPerlRegEx.Create(nil);  try    reg.Subject:='张三 abc de 数据';    reg.RegEx:='[a-zA-Z ]' ;    reg.Replacement:='';    reg.ReplaceAll;    Showmessage(reg.Subject);  finally    reg.Free;  end;end;
[解决办法]
试试这个
function ReNameStr(DestStr:string):string:
var
StrLength:Integer;
ReStr:string;
begin
StrLength := Length(DestStr);
while StrLength >0 do
begin
if not((DestStr[StrLength] in ['a'..'z'])
or(DestStr[StrLength] in ['A'..'Z'])
or(DestStr[StrLength]=' ')) then
begin
ReStr:=Copy(DestStr,1,StrLength);
StrLength := -1;
end;
Dec(StrLength);
end;
Result := ReStr;
end;

读书人网 >.NET

热点推荐