当前位置: 代码网 > it编程>数据库>Oracle > Oracle里判断字符串包含字符的几种方式

Oracle里判断字符串包含字符的几种方式

2026年08月21日 Oracle 我要评论
判断字段里有没有某个字符,这需求在oracle里太常见了。一般就三条路:like、instr、contains。有些人图省事全用like,小表问题不大,数据量上来之后慢得很明显。like是最直接的,模

判断字段里有没有某个字符,这需求在oracle里太常见了。一般就三条路:like、instr、contains。有些人图省事全用like,小表问题不大,数据量上来之后慢得很明显。

like是最直接的,模糊查询,前后加百分号就行。写法简单,但性能差,索引基本用不上,全表扫。

-- 查询包含'张'的员工
select * from employees 
where employee_name like '%张%';

真要判断子串是否存在,其实instr更好用。

它返回的是子串在字符串里的位置,从1开始,找不到就返回0。注意不是布尔值,所以条件里要写大于0。

-- 检测并返回位置
select employee_name, instr(employee_name, '张') as pos
from employees 
where instr(employee_name, '张') > 0;

我一开始也习惯用like,后来发现很多只需要判断存在与否的场景,instr写起来更直观,尤其是和其他条件拼在一起的时候。

contains是全文检索的玩法,适合大文本字段。前提是要先建context索引,不然用不了。像varchar2这种普通字段,没有索引直接contains是行不通的。

-- 创建文本索引
create index emp_name_idx on employees(employee_name) 
indextype is ctxsys.context;
-- 执行全文检索
select * from employees 
where contains(employee_name, '张') > 0;

如果需求是同时包含多个字符串,就把instr条件用and串起来。比如查产品描述里同时有“防水”和“蓝牙”的记录。

-- 检测同时包含'防水'和'蓝牙'
select * from products
where instr(product_desc, '防水') > 0
and instr(product_desc, '蓝牙') > 0;

有时候业务要的不是过滤,而是把结果分类。

比如哪些包含全部关键词、哪些只包含其中一个、哪些都不包含。用case配合instr输出可读结果,直接给前端用。

来此加密让ssl证书管理像设置闹钟一样简单。免费用户同样支持多域名、通配符证书,通过dns接口或cname解析自动完成验证,证书自动部署至应用,全程无需人工介入。

select product_name,
  case
    when instr(product_desc, '防水')>0 and instr(product_desc, '蓝牙')>0 
    then '包含全部'
    when instr(product_desc, '防水')>0 or instr(product_desc, '蓝牙')>0
    then '包含部分'
    else '不包含'
  end as contain_result
from products;

三种方式放在一起说,like适合简单模糊查询,性能最差,没什么前置条件;instr是通用子字符串检测,性能中等,没有前置条件;contains性能最好,适合大规模文本检索,但必须先建文本索引。如果只是偶尔查小表,like够用了;线上跑起来数据量大了,instr或contains该上还得上。

以上就是oracle里判断字符串包含字符的几种方式的详细内容,更多关于oracle判断字符串包含字符的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com