简介
oracle: like、regexp_like、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTR
oracle
使用LIKE操作符:用LIKE进行某个字符串值的通配符匹配,来选出某些行,查询条件中既可以包含字符,也可以包含数字.
一.like
1. % 代表0个或者多个字符.
select * from emp where en ame like 'S%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ------ --------- ----- --------- ----- ----- ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
如果要匹配%这个字符,可以用\%来表示.
create table t(id number,name varchar2(10));
insert into t values(1,'ab');
insert into t values(2,'a_b');
insert into t values(3,'ab');
insert into t values(4,'a%b');
insert into t values(5,'a%b_');
commit;
转义符可以使用任何符号,但是必须成对出现
SQL> select * from t where name like '%\_%' escape '\';
ID NAME
---------- ----------
2 a_b
5 a%b_
SQL> select * from t where name like '%A_%' escape 'A';
ID NAME
---------- ----------
2 a_b
5 a%b_
SQL> select * from t where name like '%B_%' escape 'B';
ID NAME
---------- ----------
2 a_b
5 a%b_
2. _ 代表一个字符.
select * from emp where ename like 'ALL_N';
二.regexp_like
语法:
REGEXP_LIKE (source_char, pattern [,match_option]
EG:
select first_name, last_name
from employees
where regexp_like(first_name, '^Ste(v|ph)en$');--搜索以Ste开头以en结尾中间包含v或者ph的字符串,其中字符前的'^'表示前精确,'$'表示后精确
select * from test where regexp_like(payment, '(运维|网络)');--搜索字符串中包含运维或者网络的字符串
2. REGEXP_REPLACE:使用正则表达式进行查找替换
语法:
REGEXP_REPLACE(source_char, pattern [,replacestr
[, position [, occurrence
[, match_option]]]])
EG:
select phone_number,regexp_replace(phone_number,'\.','-') new_value from employees;
3. REGEXP_INSTR:使用正则表达式返回满足正则表达式的子串在父串中的位置
语法:REGEXP_INSTR (source_char, pattern [, position
[, occurrence [, return_option
[, match_option [, subexpr]]]]])
EG:
select STREET_ADDRESS,
regexp_instr(STREET_ADDRESS, '[[:alpha:]]') as first_alpha_position
from locations;
4. REGEXP_SUBSTR:
语法:
REGEXP_SUBSTR (source_char, pattern [, position
[, occurrence [, match_option
[, subexpr]]]])
source_char:需要进行正则处理的字符串
pattern :进行匹配的正则表达式
position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
occurrence :标识第几个匹配组,默认为1
EG:
select STREET_ADDRESS, regexp_substr(STREET_ADDRESS, ' [^ ]+') as Road
from locations