不对,遇到instr('12,34','2')就有问题
我再想一下

解决方案 »

  1.   

    if instr(f1,to_char(n))=0   //不存在
      

  2.   

    不对,遇到instr('12,34','2')就有问题
    我再想一下
      

  3.   

    数字不会这样表示吧?"1,2,3,4", 
    “12,121,234"还差不多
    不过无所谓下面的方法肯定可以
    select count(*) from t1 where
    replace(f1,',')=to_char(n);replace(f1,',') 去掉f1的逗号
      

  4.   

    decode(substr(f1,instr(f1,to_char(n))-1,1) ||
           substr(f1,instr(f1,to_char(n))+length(to_char(n)),1),
           null,'YES',',','YES',',,','YES','NO')
      

  5.   

    其实上面的代码就是判断在n前后的两个字符是否是','或者null,如果是,那就符合条件,返回'YES';否则返回'NO'。
    以上代码经过测试成功。
      

  6.   

    多谢各位!我这样用的:
    select * from t1 where instr(f1,to_char(2))>0 
    得到所有包含2的记录.
      

  7.   

    SELECT * FROM T1 WHERE ',' || f1 || ',' LIKE (',' || NUM || ',')
      

  8.   

    SORRY 低级错误
    应当加‘%’
    SELECT * FROM t1 WHERE (',' || f1 || ',') LIKE ('%,' || num || ',%')
      

  9.   

    KingSunSha(弱水三千):
    当f1='12,34'  n=12时  判断有误
      

  10.   

    要写得完整,还挺复杂的,下面这个版本应该没有问题了:
    select
    decode(instr(f1,to_char(n)),
           0, 'NO',--如果instr返回0,表示不存在
           --如果instr得到1,表示在字符串首,
           --则要判断n的后一个字符是','或者null
           1, decode(substr(f1,1+length(to_char(n)),1),
                     null,'YES',',','YES','NO'),
           --其他情况如上
           decode(substr(f1,instr(f1,to_char(n))-1,1) ||
                  substr(f1,instr(f1,to_char(n))+length(to_char(n)),1),
                  null,'YES',',','YES',',,','YES','NO'))
    from ...