SQL语句中的通配符使用技巧(ESCAPE定义转义字符)

本文介绍在Oracle数据库中如何实现精确匹配以'_HIS'结尾的表名,避免因通配符导致非目标表被检索的问题,并提供使用转义字符及instr函数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天老大在讲课的时候碰到一个问题
他在演示如何手动备份库时,想选出系统中以'_HIS'结尾的表
输入SQL语句如下

select * from obj where object_type='TABLE' and object_name like '%_HIS';

[color=red]对这条SQL语句有必要说明一下,obj是该用户下的所有对象(已经以某用户身份登录),object_type='TABLE'是设置一个过滤类型,将所有对象类型是表的过滤出来,然后object_name则是根据对象名进行过滤[/color]

结果有一张表是没有下划线'_'但是以HIS结尾的,也在结果输出
最后只好将以'_HIS'结尾的表一个个写在not in()里来过滤
数据库是使用ORA

LIKE关键字共有四种通配符。“%”代表“包含0个或更多字符的任意字符串”;“_”代表“任何单个字符”;“[]”代表“指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符”;“[^]”代表“不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符”。
从以上可以看出,其实'%_HIS'和'%HIS'是等效的

那时我们都没有想起来Oracle的escape关键字,这个关键字可以定义转义字符,escape定义的转义字符后第一个字符就是想转义的内容

举个例子,比如我想定义'/'为转义字符,来将通配符'_'变为普通字符
select * from obj where object_type='TABLE' and object_name like '%/_HIS' escape '/';

这样子就可以了。


【附注】:
在mysql中,'\'是转义字符,所以在mysql中可以直接这样写
select * from obj where object_type='TABLE' and object_name like '%\_HIS';


----------------------------20090813-------------------------------
如果使用ORA的一些函数也可以达到效果,如
select object_name from obj where object_type='TABLE' and  instr(UPPER(object_name),'_HIS')>0;

----------------------------20090922-------------------------------
还有一个instr的函数可以达到效果

select object_name from obj where object_type='TABLE' and instr(UPPER(object_name),'_HIS')<>0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值