因我另一表中某一字段存放的内容为0101~0201,现在我把字段转变为如下方式:
  SELECT  REPLACE(REPLACE(CHR(39)||'0101~0102~'||')', '~)', CHR(39)), '~', CHR(39)||','||CHR(39))   FROM DUAL
  运行结果也为0101,0102
 
 我把以上sql结合起来,却得不出结果了?
  select * from guarfile   where guarno
   in  (SELECT  REPLACE(REPLACE(CHR(39)||'0101~0102~'||')', '~)', CHR(39)), '~', CHR(39)||','||CHR(39))  FROM DUAL如果修改呢?

解决方案 »

  1.   

    如果只是针某条具体的数据,应该这样表达: 
    select * from guarfile  where guarno = 串截取第一段 or guarno = 串截取第二段;
    如果是针对表中字段的内容,则先把字符串分拆成行,再select * from guarfile  where guarno in (分拆后的列);
    参考这个链接17楼的第二段SQL:
    http://topic.csdn.net/u/20080721/12/c87d1a1d-b817-4de6-84ac-4f6ab56ef15a.html?seed=714459994#
      

  2.   

    declare str varchar2(10) :='1,2';
    begin
    select id, idname, type from t_20081028 where id in (str);
    end;和这样的意思应该差不多.  把它放到in里.应该是不行的
      

  3.   

    select * from guarfile  where  '~272~273~' like '%~'||guarno||'~%'   
      

  4.   

    --建立测试环境
    create table test(guarno varchar(10) );
    insert into test select '0101' from dual ; 
    insert into test select '0102' from dual ; 
    insert into test select '0103' from dual ;  
    insert into test select '0104' from dual ;
    --测试语句
    select *from test
      where  '~0101~0102~' like '%~'||guarno||'~%';  
    --清除测试环境
    drop table test;/*--测试结果
    GUARNO
    0101
    0102
    */