我有一张表,有一个字段sd_dept类型varchar2(1000),存放格式为  
                 部门,部门,部门,部门,部门,部门,部门....  
      的格式,注意最后一个部门结束后没有逗号, 并且部门不重复,我想找在表中所有sd_dept字段包含 a部门 的记录,如何写sql语句?

解决方案 »

  1.   

    select * from t where instr(sd_dept||',','departa,')>0
    构造一个',',然后使用instr判断。
      

  2.   

    只加一个是不够的,前后都要加
    否则有可能出问题
    比如'a部门'和'aa部门'区分不出来了
    select * from t where instr(','||sd_dept||',',',departa,')>0 
      

  3.   

    谢谢两位,但好像还是有些问题,真实的数据里像这样:    一场,二场,开发部,技术部,教育科,营销部
    是不是应该改为
       select * from t where instr(','||sd_dept||',','departa')>0 
       这样instr目标函数就能找到首,尾部门 ? 另外||是什么意思? 
      

  4.   

    select * from t where instr(','||sd_dept||',' ,  ','||dept||',')>0
    ||表示字符串连接
      

  5.   

    select * from t where instr(sd_dept,'departa')>0
      

  6.   


    instr是判断是否包含的函数, || 是连接字符的运算符
    select * from t where instr(','||sd_dept||',', ','||'一场'||',')>0 就是判断 是否包含一场的sql由于考虑到有可能有一场1, 一场这样的case,所以直接用instr(sd_dept, '一场')会有误差,这样会把一场1的记录也选出来,所以就用了以上加','的方式。
      

  7.   

    这里的sd_dept代表一个字段,且参数 dept 前后加引号的话,是不是有可能会拉掉dept在首,尾时的可能比如某个记录的sd_dept字段为:  一场,二场,开发部,技术部,教育科,营销部
    我正好想查找“一场”,如果instr第二个参数为 ",一场,"肯定找不到
    再比如我正好想查 "营销部",如果instr第二个参数为 ",营销部,"肯定也找不到
      

  8.   


    假如你的数据是
    一场,二场,开发部,技术部,教育科,营销部
    ','||sd_dept||','的值为 ,一场,二场,开发部,技术部,教育科,营销部,
    你如果用一场来查的话 ','||'一场'||','的值为 ,一场,所以是可以查出来的。