去除字符串中的字母

xiaoyaolanchong 2010-04-11 12:22:54

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

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

--更新用户名后面的字母信息,如“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

...全文
242 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿三 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liangpei2008 的回复:]
//TSQL不适合做这些,即使做也不应该用游标!


Delphi(Pascal) code


uses
PerlRegEx;
procedure TForm1.btn1Click(Sender: TObject);
var
reg:TPerlRegEx;
begin
reg:=TPerlRegEx.Create(nil);
try
reg.S……
[/Quote]

用正则
ljluck7687 2010-04-12
  • 打赏
  • 举报
回复
楼主的算法还可以
wowo_haha 2010-04-11
  • 打赏
  • 举报
回复
试试这个
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;
liangpei2008 2010-04-11
  • 打赏
  • 举报
回复
//TSQL不适合做这些,即使做也不应该用游标!



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;

xiaoyaolanchong 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liangpei2008 的回复:]
用正则
[a-zA-Z ]
[/Quote]

水平有限,能具体指导一下吗?
liangpei2008 2010-04-11
  • 打赏
  • 举报
回复
用正则
[a-zA-Z ]
mathsfan 2010-04-11
  • 打赏
  • 举报
回复
用delphi写的,感觉没什么好的办法...
mathsfan 2010-04-11
  • 打赏
  • 举报
回复
var
s:string;
i:integer;
begin
s:='张三 ceshi数据';
for i:=0 to Length(s)-1 do
begin
if (s[i] in['a'..'z']) or (s[i] in ['A'..'Z']) then
begin
ShowMessage(Copy(s,1,i-1));
Break;
end;
end;
xiaoyaolanchong 2010-04-11
  • 打赏
  • 举报
回复
空格这个情况不定,也可能有,也可能没有
hongss 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaoyaolanchong 的回复:]
如“张三 ZJ”,“李四 N Y ”
[/Quote]

汉字与字母之间都有空格吗?如果是的话,可以依据空格来判断截取位置。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧