一个函数 例:"*AB"被解释成"like '%AB'","AB?"被解释成"like 'AB_'"(100分)

  • 主题发起人 主题发起人 zlyanyan
  • 开始时间 开始时间
Z

zlyanyan

Unregistered / Unconfirmed
GUEST, unregistred user!
//功能:将Index位置处的字符串分解成SQL Server7的格式。
//例:"*AB"被解释成"like '%AB'","AB?"被解释成"like 'AB_'"
//"AB" 被解释成"='AB'"。
function TForm1.ExtractSQLServer7(strMark: string): string;
 
function TForm1.ExtractSQLServer7(strMark: string): string;
var i,str_length:integer;
str:string;
begin
str:=strMark;
str_lentth:=length(strMark);
for i:=0 to str_length-1 do
begin
if pos('*',str)>0 then
begin
str:=copy(str,0,pos('*',str)-1)+'%'+copy(str,pos('*',str)+1,str_length);
end;
if pos('?',str)>0 then
begin
str:=copy(str,0,pos('?',str)-1)+'_'+copy(str,pos('?',str)+1,str_length);
end;
end;
result:='like '+str;
end;
 

i:= pos('*',strMark) ;
if i>0 then
result:= 'like '+xxx+'%';
如果只有你说的情况,应该不复杂.
 
这个问题要是返过来就有意思了。如果在查询中,用户输入了% Or _ 程序就可能要出事了。
 
是要这样一个函数吗?
function f(s:string):string;
var i:integer;
flg,flg1:boolean;
begin
flg:=false;
i:=pos('*',s);
flg:=i>0;
if flg then begin
while i>0 do begin
delete(s,i,1);
insert('%',s,i);
i:=pos('*',s);
end;
end;

i:=pos('?',s);
flg1:=i>0;
if flg then begin
while i>0 do begin
delete(s,i,1);
insert('_',s,i);
i:=pos('?',s);
end;
end;

if (flg or flg1) then
s:='like '+s;
result:=s;
end;
 
后退
顶部