Oracle 模糊查询like用法

本文详细介绍了在Oracle数据库中如何使用LIKE关键字和通配符进行模糊查询的方法,包括%、_、[]、[^]的使用场景及示例,并对比了使用instr函数进行模糊查询的效率优势。

一、我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: 
(1)% :零或者多个字符,使用%有三种情况 
字段 like ‘%关键字%’字段包含”关键字”的记录 
字段 like ‘关键字%’字段以”关键字”开始的记录 
字段 like ‘%关键字’字段以”关键字”结束的记录 
例子: 
SELECT * FROM [user] WHERE uname LIKE ‘%三%’ 
搜索结果:“张三”,“小三”、“三脚猫”,“猫三脚” 有“三” 的记录全找出来。 
SELECT * FROM [user] WHERE uname LIKE ‘%三’ (从后开始匹配) 
搜索结果:“张三”,“小三” 
另外,如果需要找出uname中既有“三”又有“猫”的记录,请使用and条件 
SELECT *FROM [user] WHERE uname LIKE ‘%三%’ AND uname LIKE ‘%猫%’ 
若使用SELECT * FROM [user] WHERE uname LIKE ‘%三%猫%’,虽然能搜索出“三脚猫”,但不能搜索出“猫三脚”。

(2)_: 单一任何字符(下划线)常用来限制表达式的字符长度语句: 
例子: 
SELECT * FROM [user] WHERE uname LIKE ‘三’ 
搜索结果:“猫三脚”这样uname为三个字符且中间一个是“三”的; 
SELECT * FROM [user] WHERE uname LIKE ‘三__’; 
搜索结果:“三脚猫”这样uname为三个字符且第一个是“三”的;

(3)[]:在某一范围内的字符,表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 
例子: 
SELECT * FROM [user] WHERE u_name LIKE ‘[张李王]三’ 
搜索结果:“张三”、“李三”、“王三”(而不是“张李王三”); 
如 [ ]内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e” 
SELECT * FROM [user] WHERE u_name LIKE ‘老[1-9]’ 
搜索结果:“老1”、“老2”、……、“老9”;

(4)[^]: 不在某范围内的字符,用法与[ ]相反。

二、在Oracle中提供了instr(strSource,strTarget)函数,比使用’%关键字%’的模式效率高很多。

instr函数也有三种情况: 
instr(字段,’关键字’)>0相当于 字段like ‘%关键字%’ 
instr(字段,’关键字’)=1相当于 字段like ‘关键字%’ 
instr(字段,’关键字’)=0相当于 字段not like ‘%关键字%’ 
例子: 
SELECT * FROM [user] WHEREinstr(uname ,’三’)>0 
用法参照上面的Like 即可

特殊用法: 
select id, namefrom user where instr(‘101914, 104703’, id) > 0; 
它等价于 
select id, namefrom user where id = 101914 or id = 104703;

Oracle数据库中的`LIKE`操作符用于在`WHERE`子句中进行模式匹配,通常用于字符串的模糊查询。`LIKE`支持通配符,可以匹配符合特定模式的字符串。基本语法如下: ```sql SELECT column_list FROM table_name WHERE column_name LIKE pattern; ``` 其中,`pattern`可以包含普通字符和通配符。Oracle中常用的通配符包括: - `%`:匹配任意数量(包括零个)的字符。 - `_`:匹配单个字符。 ### 基本用法 1. **匹配以特定字符串开头的记录** 例如,查找所有名字以`A`开头的员工: ```sql SELECT * FROM employees WHERE first_name LIKE 'A%'; ``` 2. **匹配以特定字符串结尾的记录** 例如,查找所有名字以`son`结尾的员工: ```sql SELECT * FROM employees WHERE last_name LIKE '%son'; ``` 3. **匹配包含特定字符串的记录** 例如,查找名字中包含`John`的员工: ```sql SELECT * FROM employees WHERE first_name LIKE '%John%'; ``` 4. **使用下划线匹配单个字符** 例如,查找名字为`J_hn`的员工,其中`_`表示任意一个字符: ```sql SELECT * FROM employees WHERE first_name LIKE 'J_hn'; ``` 5. **结合`NOT`进行反向匹配** 例如,查找名字不以`A`开头的员工: ```sql SELECT * FROM employees WHERE first_name NOT LIKE 'A%'; ``` ### 转义特殊字符 如果查询的模式中包含`%`或`_`,并且希望将其作为普通字符进行匹配,可以使用`ESCAPE`关键字指定转义字符。例如,查找包含下划线的用户名: ```sql SELECT * FROM users WHERE username LIKE '%\_%' ESCAPE '\'; ``` 在此查询中,`\`是转义字符,`\_`表示匹配一个实际的下划线字符。 ### 性能注意事项 - `LIKE`操作符在使用前导通配符(如`%value`或`%value%`)时,可能导致索引失效,查询性能下降。 - 如果查询模式以通配符开头(如`%value`),则无法使用B树索引,可能需要使用全文索引或其他优化手段。 ### 大小写敏感性 Oracle数据库默认情况下是大小写敏感的。例如,`LIKE 'A%'`不会匹配`'a%'`。如果需要忽略大小写,可以使用`UPPER()`或`LOWER()`函数进行转换: ```sql SELECT * FROM employees WHERE UPPER(first_name) LIKE 'A%'; ``` ### 示例 以下是一些常见的查询示例: 1. **查找所有姓氏以`Smi`开头的员工**: ```sql SELECT * FROM employees WHERE last_name LIKE 'Smi%'; ``` 2. **查找所有名字长度为5的员工**: ```sql SELECT * FROM employees WHERE first_name LIKE '_____%'; ``` 3. **查找所有用户名中包含`user_123`的用户**: ```sql SELECT * FROM users WHERE username LIKE '%user\_123%' ESCAPE '\'; ``` 4. **查找所有名字中第二个字母是`a`的员工**: ```sql SELECT * FROM employees WHERE first_name LIKE '_a%'; ``` 通过这些用法,`LIKE`操作符可以灵活地满足多种模糊查询需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值