我有一个字符串:(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()等函数,就是不知道如何在第二个单引号前插入%
     
                    谢谢,急用!!!!!!!

解决方案 »

  1.   

    procedure TForm1.Button4Click(Sender: TObject);
    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;
      

  2.   

    function SqlConvert(SqlStr:string):string;
    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;这是我午间休息时写出来的,经过了一些简单的测试,希望能够帮上你的忙。
      

  3.   

    使用时直接调用函数SqlConvert()即可。
      

  4.   

    就用那个sqlconvert吧,好像不错哦
      

  5.   

    我上次给你的,正则表达式的:
    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;
      

  6.   

    忘记说了。使用函数sqlconvert() 需要调用一个正则表达式类RegExpr