有以下表结构:
LineID LineName 
1       D30
2       D331
3       K30
4       T30
5       1430
6       3014
我们想用户输入30时只得出D30,K30,T30这三个结果,请教各位大牛,该如何实现呢?
先谢谢啦!

解决方案 »

  1.   

    select * from tb where LineName like '%30%'
      

  2.   

    也可以这样写
    select * from tb where instr(LineName,'30')>0
      

  3.   

    我看错了,应该这样select * from tb where LineName like '%30'
      

  4.   

    试试这样行不?select * from tb where linename like '_30';
      

  5.   


    这样也不对  应该是:
    select * from tb where LineName like '_30'
    在oracle里面通配符有两个"_","%"
    "_"代表一个字符,"%"代表一个或多个字符我们想用户输入30时只得出D30,K30,T30这三个结果,要是用"%"就把1430输出来了!
      

  6.   

    SQL codeselect * from tb where linename like '_30'; 
      

  7.   

    LineName的值都有些什么格式,看来是由1个或0个大写字母开头以一串数字结尾的字符串,还有没有其它情况的格式,你说明了才好做。
      

  8.   

    谢谢各位啦。
    按我的原来的表述
    select * from tb where linename like '_30'
    就可以解决了。
    但实际的情况是前面可能是一个或多个字母或汉字,后面也一样
    如“地铁10号线”这样的情况,用户输入10时,能查到“10路”,“10路快”,"地铁10号线",而排除“100路”,"103路快",“游101路”等情况。
    表达不清楚,抱歉了。
      

  9.   

    select * from tb where linename like '%30%' and not regexp_like(linename,'[0-9]30[0-9]');
    不知道写的对不对
      

  10.   

    select * from tb where linename like '%30%' and (not regexp_like(linename,'[0-9]30') or not regexp_like(linename,'30[0-9]')); 
    可能这样更准确点
      

  11.   

    这种方案可行,不过得将中间那个or条件改成and,而且有点慢,不知道为什么?呵呵
      

  12.   

    select * from tb where instr(linename,'30')>0 and regexp_instr(linename,'[0-9]30')=0 and regexp_instr(linename,'30[0-9]')=0;
    这样试试是否快点