Oracle like 里面的通配符 以及regexp_like

关于like后面的条件,Oracle提供了四种匹配模式:

1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

 

3. regexp_like 正则表达式函数查询


--查询FieldName中以1开头60结束的记录并且长度是7位
select * from fzq where FieldName like '1____60';
select * from fzq where regexp_like(FieldName,'1....60');


--查询FieldName中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
--使用like就不是很好实现了。
select * from fzq where regexp_like(FieldName,'1[0-9]{4}60');


-- 也可以这样实现,使用字符集。
select * from fzq where regexp_like(FieldName,'1[[:digit:]]{4}60');


-- 查询FieldName中不是纯数字的记录
select * from fzq where not regexp_like(FieldName,'^[[:digit:]]+$');


-- 查询FieldName中不包含任何数字的记录。
select * from fzq where regexp_like(FieldName,'^[^[:digit:]]+$');


--查询以12或者1b开头的记录.不区分大小写。
select * from fzq where regexp_like(FieldName,'^1[2b]','i');


--查询以12或者1b开头的记录.区分大小写。
select * from fzq where regexp_like(FieldName,'^1[2B]');


-- 查询数据中包含空白的记录。
select * from fzq where regexp_like(FieldName,'[[:space:]]');


--查询所有包含小写字母或者数字的记录。
select * from fzq where regexp_like(FieldName,'^([a-z]+|[0-9]+)$');


--查询任何包含标点符号的记录。
select * from fzq where regexp_like(FieldName,'[[:punct:]]');

posted @ 2018-08-30 16:51  kakaisgood  阅读(3720)  评论(0编辑  收藏  举报