我有一个字符串:(Client_No like % '12FF3') AND (Sys_No > '12') AND (Sys_No like % '36DD9CC')
我想转换成这样的字符串:(Client_No like '%12FF3%') AND (Sys_No > '12') AND (Sys_No like '%36DD9CC%')
也就是说我想在一个被单引号包含着的字符串前、后分别插入 % 符号!(我在写SQL时要用到)
帮帮我啊,谢谢,急用!!!!!!!
我用过StrPos(),StrReplace(),copy(),insert()等函数,就是不知道如何在第二个单引号前插入%
谢谢,急用!!!!!!!
var
mStr1: String;
i: integer;
mFound: boolean;
begin
mStr1 := '(Client_No like % ''12FF3'') AND (Sys_No > ''12'') AND (Sys_No like % ''36DD9CC'')';
i:= 1;
mFound := False;
while i<=Length(mStr1) do
begin
if mStr1[i] = '%' then
begin
Delete(mStr1,i,1);
mFound := True;
Continue;
end; if (mStr1[i] = '''') and mFound then
begin
Insert('%',mStr1,i+1);
i:=i+1;
while i<=Length(mStr1) do
begin
if mStr1[i]='''' then
begin
Insert('%',mStr1,i);
break;
end;
inc(i);
end;
mFound := False;
end;
Inc(i);
end; ShowMessage(mStr1);
end;
var
Reg:TRegExpr;
nPos,mPos:integer;
tmp0,tmp,str1,str2,str,return,replace:string;
label
SQL;
begin
return:=SqlStr;
replace:=SqlStr; Reg:=TRegExpr.Create;
Reg.Expression:='\(([^\)]*)\)';
if Reg.Exec(SqlStr) then
begin
SQL:
tmp0:=Reg.Match[0];
nPos:=pos('%',tmp0);
mPos:=pos(#39,tmp0);
if (nPos>0)and(mPos>nPos) then
begin
tmp:=copy(tmp0,nPos,mPos-nPos+1);
if AnsiReplaceStr(tmp,' ','')='%'+#39 then
begin
str1:=copy(tmp0,0,mPos);
str2:=copy(tmp0,mPos+1,length(tmp0)); str1:=AnsiReplaceStr(str1,tmp,' '+#39+'%');
str2:=AnsiReplaceStr(str2,#39,'%'+#39);
str:=str1+str2; return:=AnsiReplaceStr(return,tmp0,str);
end;
end;
replace:=AnsiReplaceStr(replace,Reg.Match[0],'');
if Reg.Exec(replace) then goto SQL;
end
else
begin
nPos:=pos('%',SqlStr);
mPos:=pos(#39,SqlStr);
if (nPos>0)and(mPos>nPos) then
begin
tmp:=copy(SqlStr,nPos,mPos-nPos+1);
if AnsiReplaceStr(tmp,' ','')='%'+#39 then
begin
str1:=copy(SqlStr,0,mPos);
str2:=copy(SqlStr,mPos+1,length(SqlStr)); str1:=AnsiReplaceStr(str1,tmp,' '+#39+'%');
str2:=AnsiReplaceStr(str2,#39,'%'+#39);
str:=str1+str2; return:=str;
end;
end;
end;
result:=return;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
begin
str:='(Client_No like % '+#39+'12FF3'+#39+') AND (Sys_No > '+#39+'12'+#39+
') AND (Sys_No like % '+#39+'36DD9CC'+#39+')';
//str:='Client_No like % '+#39+'12FF3'+#39;
ShowMessage(SqlConvert(str));
end;这是我午间休息时写出来的,经过了一些简单的测试,希望能够帮上你的忙。
uses regexpr;
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1:string;
p:tregexpr;
begin
p:=tregexpr.Create;
s:='(Client_No like % ''12FF3'') AND (Sys_No > ''12'') AND (Sys_No like % ''36DD9CC'')';
p.Expression:='% *''([^'']+)''';
if not p.Exec(s) then
begin
ShowMessage('not find error');
exit;
end;
s1:=p.Replace(s,'''%$1%''',true);
ShowMessage(s1);
end;