我有一张表,有一个字段sd_dept类型varchar2(1000),存放格式为
部门,部门,部门,部门,部门,部门,部门....
的格式,注意最后一个部门结束后没有逗号, 并且部门不重复,我想找在表中所有sd_dept字段包含 a部门 的记录,如何写sql语句?
部门,部门,部门,部门,部门,部门,部门....
的格式,注意最后一个部门结束后没有逗号, 并且部门不重复,我想找在表中所有sd_dept字段包含 a部门 的记录,如何写sql语句?
构造一个',',然后使用instr判断。
否则有可能出问题
比如'a部门'和'aa部门'区分不出来了
select * from t where instr(','||sd_dept||',',',departa,')>0
是不是应该改为
select * from t where instr(','||sd_dept||',','departa')>0
这样instr目标函数就能找到首,尾部门 ? 另外||是什么意思?
||表示字符串连接
instr是判断是否包含的函数, || 是连接字符的运算符
select * from t where instr(','||sd_dept||',', ','||'一场'||',')>0 就是判断 是否包含一场的sql由于考虑到有可能有一场1, 一场这样的case,所以直接用instr(sd_dept, '一场')会有误差,这样会把一场1的记录也选出来,所以就用了以上加','的方式。
我正好想查找“一场”,如果instr第二个参数为 ",一场,"肯定找不到
再比如我正好想查 "营销部",如果instr第二个参数为 ",营销部,"肯定也找不到
假如你的数据是
一场,二场,开发部,技术部,教育科,营销部
','||sd_dept||','的值为 ,一场,二场,开发部,技术部,教育科,营销部,
你如果用一场来查的话 ','||'一场'||','的值为 ,一场,所以是可以查出来的。