纠正 : 网上有好多帖子说可以用regexp_like来做
比如 :
有这么一张表Student
- name sex
- liMing Gril
- Weiming Boy
- RedWolf Boy
- redmight Gril
- NiNa Gril
select s.name
from Student s
where regexp_like(s.name,'[M]','i')
-- 此处的M写成m也是一样
查询结果 :
- liMing
- Weiming
- redmight
注意 :
这样查询的的确确会把名字包含 “M” 或者 “m” 的数据查询出来 但是 :
查询语句如果这么写
select *
from Student s
where regexp_like(s.name,'[MO]','i')
-- 注意 此处MO写成Mo,mO,mo的效果都一样
查询结果 :
- liMing
- Weiming
- RedWolf
- redmight
结论 : 这种用regexp_like的写法类似加了一个这样一个条件
-- 伪代码
IF t.NAME.Contain(M)||t.NAME.Contain(o)||t.NAME.Contain(O)||t.NAME.Contain(m) THEN RETURN t
-- 任意包含其中忽略大小写字符 即为匹配
那么问题来了 : Oracle 模糊查询不区分大小写 应该怎么写呢?
这么写 :
-- 将字段与匹配条件都转换为大写或者小写再进行查询即可
-- 转为大写
SELECT * FROM Student s WHERE upper(s.name) LIKE upper('%Red%')
-- 或者转为小写
SELECT * FROM Student s WHERE lower(s.name) LIKE lower('%Red%')
这样就行了…