1、统计字符出现次数
如:统计以下字符串逗号出现次数
字符串的总长度减去去掉逗号之后的字符串长度,就得到了逗号的个数,
第 1 行调用 LENGTH 函数获取字符串总长 ,第 2 行仍然调用 LENGTH 函数获取不含逗号的字符串长度,而逗号的删除则借助了REPLACE 函数
select (length('10,CLARK,MANAGER')-
length(replace('10,CLARK,MANAGER',',','')))/length(',')
from dual;
--返回结果2
如果被搜索的字符串的长度大于 1 的话,就必须使用除法运算。下面的例子统计在字符串 HELLO HELLO 中出现了多少个 LL
select
(length('HELLO HELLO HELLO')-
length(replace('HELLO HELLO HELLO','LL','')))/length('LL')
,
(length('HELLO HELLO HELLO')-
length(replace('HELLO HELLO HELLO','LL','')))
from DUAL;
--返回结果 3 6
2、批量删除不想要字符
如:删除ABCDEFG 中的 ABE
使用translate内置函数
select
replace(translate('ABCDEFG','ABE','aaaaa'),'a')
from DUAL;
--返回结果CDFG
3、分离数字和字符数据
如:SMITH800,需要分离为 SMITH 800
为了提取数字,首先用 TRANSLATE 函数把所有的字符数据分离出来。使用 TRANSLATE 函数把每一个非数字字符都替换为小写字母 z。然后使用 REPLACE 函数删除,所有的小写字母 z,这样就只留下数字字符,我们可以将其转换为一个数字
select replace(
translate('SMITH800','0123456789','0000000000'),'0') ,
to_number(
replace(
translate(lower('SMITH800'),
'abcdefghijklmnopqrstuvwxyz',
rpad('z',26,'z')),'z'))
from dual;
--返回结果 SMITH 800
4、判断含有字母和数字的字符串
使用 TRANSLATE 函数把字母字符和数字字符替换成单一字符,然后找出那些除了该字符还
包含其他字符的行
select data
from test
where translate(lower(data),
'0123456789abcdefghijklmnopqrstuvwxyz',
rpad('a',36,'a')) = rpad('a',length(data),'a');
5、提取姓名的首字母(大写)
如 获考虑人名 Stewie Griffifin,你希望得到 S.G.
select replace(
replace(
translate(replace('Stewie Griffin', '.', ''),
'abcdefghijklmnopqrstuvwxyz',
rpad('#',26,'#') ), '#','' ),' ','.' ) ||'.'
from dual;
--返回S.G.