如 :select * from table where name in ('001,002,003,004') , name的值会有一到两个,一个的当然没问题. 但是name='001,003'就不好了,请叫各位高手该如何查询

解决方案 »

  1.   

    create table t_x (name varchar2(10));
    insert into t_x values('001');
    insert into t_x values('002');
    insert into t_x values('003');
    insert into t_x values('004');
    insert into t_x values('005');
    commit;select t.*
      from t_x t,
           (select regexp_substr('001,002,003,004', '[^,]+', 1, level) str
              from dual
            connect by level <= regexp_count('001,002,003,004', ',') + 1) t1
     where t.name = t1.str
      

  2.   

    没看明白
    楼主是要查询name在001,002,003,004在这3个范围?name字段是字符类型的吧?为何不对001,002,003单独加单引?
      

  3.   

    name字段是字符类型的,这个字段的内容是用逗号分隔开的。
    然后用户选择查询条件进行查询这个name字段匹配的项,查询条件也是用逗号分隔开的 。
      

  4.   

    应该是少加了单引号
    select * from table where name in ('001’,'002','003','004')
      

  5.   

    LZ的意思我帮忙说一下,
    数据库中的NAME字段的值有可能是001,003这种情况下,LZ用IN显然差不多了,如果就像LZ所说的就4种情况的话,用LIKe就好了。select * from table where name lik '%001%' or name like '%002%' or name like '%003%' or name like '%004%当然我估计情况不是这么简单,呵呵,如果值很多的话,效率问题留给大家