var sqltext,str1,str2: string; i,l: integer; begin str:= '5916668'; seltext:= 'select max(id) from table1 where 1=1 and id like '; for i:= 1 to length(str1) do begin str2:= str1[i] + '%'; adoquery1.sql.text:= sqltext + ' and id like ''' + str2+ ''''; end; adoquery1.open; ... end;
同LS用循环去解决... 不过可能用SQL去处理更好一些,后台存储过程去做吧。
你到SQL版块去问可能会更好的答案...
var sqltext,str1,str2: string; i,l: integer; begin str:= '5916668'; seltext:= 'select max(id) from table1 where 1=1 and id like '; for i:= 1 to length(str1) do begin str2:= '%' + copy(str1,1,i) + '%'; adoquery1.sql.text:= sqltext + ' and id like ''' + str2+ ''''; end; adoquery1.open; ... end;
相似的规则是:只能从最左边开始?用sql实现: select f1,len(f1) fLen from tb where f1=left('51966668',len(f1)) order by fLen desc
如果只要最相似的,就top 1
DECLARE @T TABLE (name VARCHAR(10)) INSERT INTO @T select 5 union all select 59 union all select 5916 union all select 591 select max(name) from @T where name like '%5%' or name like '%51%' or name like '%519%' or name like '%5196%' or name like '%51966%' -- 更长的-- result 5916 var sqltext,str1,str2: string; i,l: integer; begin str:= '5916668'; seltext:= 'select max(id) from table1 where 1=1 '; for i:= 1 to length(str1) do begin str2:= '%' + copy(str1,1,i) + '%'; adoquery1.sql.text:= sqltext + ' or id like ''' + str2+ ''''; end; adoquery1.open; ... end;
sqltext,str1,str2: string;
i,l: integer;
begin
str:= '5916668';
seltext:= 'select max(id) from table1 where 1=1 and id like ';
for i:= 1 to length(str1) do
begin
str2:= str1[i] + '%';
adoquery1.sql.text:= sqltext + ' and id like ''' + str2+ '''';
end;
adoquery1.open;
...
end;
不过可能用SQL去处理更好一些,后台存储过程去做吧。
sqltext,str1,str2: string;
i,l: integer;
begin
str:= '5916668';
seltext:= 'select max(id) from table1 where 1=1 and id like ';
for i:= 1 to length(str1) do
begin
str2:= '%' + copy(str1,1,i) + '%';
adoquery1.sql.text:= sqltext + ' and id like ''' + str2+ '''';
end;
adoquery1.open;
...
end;
select f1,len(f1) fLen
from tb
where f1=left('51966668',len(f1))
order by fLen desc
DECLARE @T TABLE (name VARCHAR(10))
INSERT INTO @T
select 5 union all
select 59 union all
select 5916 union all
select 591 select max(name)
from @T
where name like '%5%' or name like '%51%' or name like '%519%'
or name like '%5196%' or name like '%51966%' -- 更长的-- result 5916
var
sqltext,str1,str2: string;
i,l: integer;
begin
str:= '5916668';
seltext:= 'select max(id) from table1 where 1=1 ';
for i:= 1 to length(str1) do
begin
str2:= '%' + copy(str1,1,i) + '%';
adoquery1.sql.text:= sqltext + ' or id like ''' + str2+ '''';
end;
adoquery1.open;
...
end;