jlandzpa:
就是说针对上面两中情况:比如paddr = a + c时:
1、时,要找到所有A.addr = a;的匹配的情况;
2、时,要找到所有A.addr = a + b的匹配的情况;
我在线的,请帮帮我,我前台开发用的cb,要求效率要比较高,后台DB用的oracle8i,请帮帮我

解决方案 »

  1.   

    解释一下你的实现角度
    a.addr ="长安街";
    CString strAddr = _T("长安街天安门");
    select * from a where a.addr like "%长安街天安门%";
    而且匹配字符是不固定的,通常是比a.addr更详细使用存储过程
    一个字符匹配一次,结果保存到中间表里
    select * from a where a.addr like '长%'
      

  2.   

    两种可能都是存在的,所以都要找出来。
    比如说CString strAddr = _T("长安街天安门");
    而数据表中可能有这些数据:"长安街",“长安街北门”,“长安街十子路口”等等情况,这些数据都要找出来,最好能比较快,数据表中数据量不是很大,最多几万,怎么样能很快都找出来,分不够可以再给,请大家帮忙
      

  3.   

    很难,除非查询字段中有分割符把各个查询词分开,比如:
    CString strAddr = _T("长安街,天安门");
    那样就能根据各个词来查询:
    select ... from ...
     where addr like '%长安街%' or addr like '%天安门%';
      

  4.   

    建议,写一个自定义函数,将目标字符串与待查字符串比较,返回最大的连续匹配字符数目(注意是最大的,因为匹配可能不止一处)。比如要查"长安街天安门",对地址"长安街十号",就返回3。写SQL语句就容易了,而且可以按匹配度来排序返回记录呢。