oracle中如何查找一个字段中包含指定的字符串

icod 2009-06-08 04:07:44
我有一张表,有一个字段sd_dept类型varchar2(1000),存放格式为
部门,部门,部门,部门,部门,部门,部门....
的格式,注意最后一个部门结束后没有逗号, 并且部门不重复,我想找在表中所有sd_dept字段包含 a部门 的记录,如何写sql语句?
...全文
22211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 inthirties 的回复:]
引用 3 楼 icod 的回复:

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



instr是判断是否包含的函数, || 是连接字符的运算符


select * from t where instr(','||sd_dept||',', ','||'一场'||',')>0 就是判断 是否包含一场…
[/Quote]

假如你的数据是
一场,二场,开发部,技术部,教育科,营销部
','||sd_dept||','的值为 ,一场,二场,开发部,技术部,教育科,营销部,


你如果用一场来查的话 ','||'一场'||','的值为 ,一场,

所以是可以查出来的。

icod 2009-06-08
  • 打赏
  • 举报
回复
这里的sd_dept代表一个字段,且参数 dept 前后加引号的话,是不是有可能会拉掉dept在首,尾时的可能

比如某个记录的sd_dept字段为: 一场,二场,开发部,技术部,教育科,营销部
我正好想查找“一场”,如果instr第二个参数为 ",一场,"肯定找不到
再比如我正好想查 "营销部",如果instr第二个参数为 ",营销部,"肯定也找不到
pathuang68 2009-06-08
  • 打赏
  • 举报
回复 1
[Quote=引用 2 楼 bw555 的回复:]
只加一个是不够的,前后都要加
否则有可能出问题
比如'a部门'和'aa部门'区分不出来了

SQL codeselect * from t where instr(','||sd_dept||',',',departa,')>0




引用 1 楼 william3033 的回复:
select * from t where instr(sd_dept||',','departa,')>0
构造一个',',然后使用instr判断。
[/Quote]
inthirties 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icod 的回复:]
谢谢两位,但好像还是有些问题,真实的数据里像这样:    一场,二场,开发部,技术部,教育科,营销部
是不是应该改为
  select * from t where instr(','||sd_dept||',','departa')>0
  这样instr目标函数就能找到首,尾部门 ? 另外||是什么意思?

[/Quote]

instr是判断是否包含的函数, || 是连接字符的运算符


select * from t where instr(','||sd_dept||',', ','||'一场'||',')>0 就是判断 是否包含一场的sql

由于考虑到有可能有一场1, 一场这样的case,所以直接用instr(sd_dept, '一场')会有误差,这样会把一场1的记录也选出来,所以就用了以上加','的方式。
icod 2009-06-08
  • 打赏
  • 举报
回复
select * from t where instr(sd_dept,'departa')>0
fosjos 2009-06-08
  • 打赏
  • 举报
回复
select * from t where instr(','||sd_dept||',' ,  ','||dept||',')>0

||表示字符串连接
icod 2009-06-08
  • 打赏
  • 举报
回复
谢谢两位,但好像还是有些问题,真实的数据里像这样: 一场,二场,开发部,技术部,教育科,营销部
是不是应该改为
select * from t where instr(','||sd_dept||',','departa')>0
这样instr目标函数就能找到首,尾部门 ? 另外||是什么意思?
bw555 2009-06-08
  • 打赏
  • 举报
回复
只加一个是不够的,前后都要加
否则有可能出问题
比如'a部门'和'aa部门'区分不出来了
select * from t where instr(','||sd_dept||',',',departa,')>0 


[Quote=引用 1 楼 william3033 的回复:]
select * from t where instr(sd_dept||',','departa,')>0
构造一个',',然后使用instr判断。
[/Quote]
william3033 2009-06-08
  • 打赏
  • 举报
回复
select * from t where instr(sd_dept||',','departa,')>0
构造一个',',然后使用instr判断。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧